一、相同点
GET 请求和 POST 请求底层都是基于 TCP/IP 协议实现的,使用二者中的任意一个,都可以实现客户端和服务器端的双向交互。
二、不同点
(1).约定和规范
对于GET 请求和 POST来说,它们最大的区别是规范和约定上的不同。在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 是用来传递实体的。所以在我们开发中对于获取一般常用GET请求,而对于数据的增添、删除、修改,一般都使用POST请求进行操作。还有一点,他们两者之间的参数传递也是不同的。GET 请求是将参数拼接到 URL 上进行参数传递的,而 POST 是将参数写入到请求正文中传递的。
(2).缓存
GET请求会被浏览器主动缓存,比如常见的CSS,JS,HTML请求都会被缓存,如果下次传输的数据相同,那么他们就会返回缓存中的内容,以求更快的展示所需要的数据。
(3).参数长度限制
由于GET请求的参数通过url来传递的,而url的长度是有限制的,根据不同的浏览器以及不同的浏览器版本,他们大小的限制也是不同的。
对于POST请求来说,参数存放在request body中,它没有大小限制。
(4).效率
GET产生一个TCP数据包,而POST产生2个TCP数据包,为什么呢?
对于GET请求来说,浏览器发送请求,会把http header和data一并发送出去,服务器做出相应200ok。而对于POST而言,浏览器会先发送header,服务器响应100continue,再发送data,服务器再做出响应200ok。因此POST在时间上会消耗比GET要大。当然,并不是所有的浏览器POST都会发送2次包,Firefox就只发送一次。
(5).回退和刷新不同
GET 请求可以直接进行回退和刷新,不会对用户和程序产生任何影响;而 POST 请求如果直接回滚和刷新将会把数据再次提交。
总结
GET 和 POST 是 HTTP 请求中最常用的两种请求方法,它们的底层都是基于 TCP/IP 实现的。但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中可能会有所不同。