一、相同点
GET 要乞降 POST 要求底层都是基于 TCP/IP 协议实现的,利用二者中的任意一个,都可以实现客户端和做事器真个双向交互。
二、不同点
约定和规范
对付GET 要乞降 POST来说,它们最大的差异是规范和约定上的不同。在规范中,定义 GET 要求是用来获取资源的,也便是进行查询操作的,而 POST 是用来通报实体的。以是在我们开拓中对付获取一样平常常用GET要求,而对付数据的增长、删除、修正,一样平常都利用POST要求进行操作。还有一点,他们两者之间的参数通报也是不同的。GET 要求是将参数拼接到 URL 上进行参数通报的,而 POST 是将参数写入到要求正文中通报的。
如下图所示,对付get要求而言,一样平常用于数据的查询,要求参数拼接到URL路径中:
如下图所示,对付add这个接口而言,因此Post进行要求。
是将参数写入到要求正文中通报的。如下图所示:
缓存
GET要求会被浏览器主动缓存,比如常见的CSS,JS,HTML要求都会被缓存,如果下次传输的数据相同,那么他们就会返回缓存中的内容,以求更快的展示所须要的数据。
如下图所示:
首先说一下状态码304:是对客户端有缓存情形下做事真个一种相应。
在浏览器第一次要求某一个URL时,做事器真个返回状态会是200,内容是客户端要求的资源,同时有一个Last-Modified的属性标记此文件在做事器端末了被修正的韶光。客户端第二次要求此URL时,根据HTTP协议的规定,浏览器会向做事器传送If-Modified-Since报头,讯问该韶光之后文件是否有被修正过。 如果做事器真个资源没有变革,则自动返回 HTTP 304状态码,内容为空,这样就节省了传输数据量。下面供应大略单纯流程图较为清晰:
以是对付常见的CSS,JS,HTML要求都会被缓存。
而对付POST要求来说:POST要求默认不会进行缓存。如下图所示:
他会再次发送要求,拿到相应数据,不会进入缓存。
参数长度限定
由于GET要求的参数通过url来通报的,而url的长度是有限定的,根据不同的浏览器以及不同的浏览器版本,他们大小的限定也是不同的。
对付POST要求来说,参数存放在request body中,它没有大小限定。
效率
GET产生一个TCP数据包,而POST产生2个TCP数据包,为什么呢?
对付GET要求来说,浏览器发送要求,会把http header和data一并发送出去,做事器做出相应200ok。而对付POST而言,浏览器会先发送header,做事器相应100continue,再发送data,做事器再做出相应200ok。因此POST在韶光上会花费比GET要大。当然,并不是所有的浏览器POST都会发送2次包,Firefox就只发送一次。
回退和刷新不同
GET 要求可以直接进行回退和刷新,不会对用户和程序产生任何影响;而 POST 要求如果直接回滚和刷新将会把数据再次提交。
总结
GET 和 POST 是 HTTP 要求中最常用的两种要求方法,它们的底层都是基于 TCP/IP 实现的。但是由于 HTTP 的规定以及浏览器/做事器的限定,导致它们在运用过程中可能会有所不同。