一般意义上理解的区别有:

  1.请求缓存:GET 会被缓存,而post不会

  2.收藏书签:GET可以,而POST不能

  3.保留浏览器历史记录:GET可以,而POST不能

  4.用处:get常用于取回数据,post用于提交数据

  5.安全性:post比get安全

  6.请求参数:querystring 是url的一部分get、post都可以带上。 get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)

  7.请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制

以上的说法是存在误区的:

首先:get常用于取回数据,post用于提交数据,这是不存在的,曾听到过这样一种说法:get替换post来优化网站性能。其实post是可以在一些UI框架中取回数据的,同样get也能够达到提交数据的作用(get传送的数据量较小,请求体不能大于2KB,formdata可能会稍微高点。哈哈)。GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

其次:请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制。

这个不准确,大量文献也都这么说。但是GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制(不仅仅是querystring的长度),这个限制是特定的浏览器及服务器对他的限制。

参考文档,里面有一句:’若批评无意义,则赞美无意义’,还是很帅的。虽然不知道后来怎么扯上状态码了。https://blog.csdn.net/kebi007/article/details/103059900

估计是想说明这个:100Continue其实不叫发送两次,只能说请求分两次发送。当然因为确实是分两次发送,时间上消耗的要多一点。

!!!并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。(这个广告打的漂亮。我记住火狐了)

GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包。

post请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应

over.

 

 

posted on 2019-11-28 10:42  hole_cheng  阅读(209)  评论(0编辑  收藏  举报