总的来说,GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 ## 区别 1.数据量 因为浏览器而非HTTP协议的原因,**HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。**GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。 2.安全 GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 所以,get方式可能会不安全。 3.HTTP语义/用法 get是获取数据的,而post是提交数据的。 4.幂等 GET 用于获取信息,是无副作用的,是幂等的,且可缓存, 而POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET在浏览器回退时是无害的,而POST会再次提交请求。所以可能会造成二次请求的问题,这里需要防重发。 5.效率 GET产生一个TCP数据包;POST产生两个TCP数据包。 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。