一、论点
1.Get用于信息获取,http协议要求安全性和幂等性,Post请求用于更新和修改服务的资源,不具有幂等性;
2.两者本质上都是TCP/IP协议链接,并无差别,只是由于http的相关规定、浏览器、服务器等的限制,导致在使用过程中体现出一些常见的不通点;
二、详述
1.关于幂等性
首先什么是幂等性?
Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.
在HTTP协议1.1中,有以上这段话,简而言之,即对于某个资源请求,无论请求1次或者N次,对于资源产生的副作用应该是一样的。
从这个概念上就很容易理解,Get请求是幂等性的,无论请求多少次,返回的结果是一致的,而Post,请求一次则会产生一份新的资源,并不满足幂等原则。需要注意的是,Put请求也是幂等性的。
PUT请求是我们不太常接触到的HTTP请求协议之一,PUT请求之后完成对于资源的修改,由A修改为B,而多次请求,最终结果还是合并到B资源,从此角度理解,PUT请求设计师满足幂等操作的。
2.关于TCP协议
两者本质都是基于TCP链接,这个其实很好理解,HTTP协议是面向于应用层,而传输层则是TCP协议,平时常说的socket则是对TCP/IP协议的封装,可以理解为一个API,通过API使用TCP/IP协议。因此可以这么说,TCP/IP协议提供了一种通信能力,是HTTP协议的基石,而HTTP协议则是提供了一种具体的实现方式。
3.常见区别
那我们通常看到的Get和Post请求的区别,大致区别如下:
1.参数传递:Get请求相关参数直接可以放置在url中,而Post请求相关参数则封装到http包体中;
2.传输数据大小:HTTP协议对Get和Post没有明确限定,对于Get url长度的限制取决于服务器和浏览器,对于Post数据包的大小取决于服务器;
3.数据包:GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。【对于firefox浏览器一次发送Post两个tcp包需要验证】。
以上。
三、参考文献
1.http://www.cnblogs.com/weidagang2046/archive/2011/06/04/2063696.html;
2.http://blog.csdn.net/happy_xiahuixiax/article/details/72859762;
3.https://yq.aliyun.com/articles/49156