post和get的区别
POST和GET是什么?
他是HTTP协议中两种发送请求的方式
HTTP
超文本传输协议:是一个设计来使客户端和服务器顺利进行通讯的协议。他是基于TCP/IP协议族的。
POST和GET如何发送请求
在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之 后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]
-
GET实例
GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive
从上面我们可以看出get请求方式会将数据附在url之后用’?'隔开,参数是采用键值(key=vlaue)对以明文的方式显示在请求行中(这说明get方式不安全)。多个参数之间用&连接。Url的编码格式采用的是ASCII码,而不是Unicode码
-
POST实例
POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive (----此处空一行----) name=Professional%20Ajax&publisher=Wiley
从上面我们可以看出post请求方式会将数据放在body里面。
总结:get没有post那么安全
POST和GET两种方式请求过程
首先我们必须清楚post和get是HTTP协议的,而HTTP协议是基于TCP/IP协议族的所以说post和get本质也是基于TCP/IP的,两种方式建立连接的过程也是通过三次握手。
- GET
- 浏览器请求tcp连接(第一次握手)
- 服务器答应进行tcp连接(第二次握手)
- 浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
- 服务器返回200 OK响应
- POST
-
浏览器请求tcp连接(第一次握手)
-
服务器答应进行tcp连接(第二次握手)
-
浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
-
服务器返回100 Continue响应
-
浏览器发送数据
-
服务器返回200 OK响应
-
通过请求过程我们可以看出get似乎是比post快(但实际上两者差距可以忽略不计)
对于GET方式在URL中传送的参数有长度限制的误解
http协议中并没有规定get和post请求传递参数有长度限制,这些限制主要是因为浏览器的限制,如果URL太长会对服务器造成一种负担。不同浏览器之间对长度的限制不一样。
post方式由于不是通过url传递,理论上没有限制,但实际各个WEB服务器会规定对post提交数据大小进行限制。
参考:https://blog.csdn.net/xiaomin1991222/article/details/50979701