乐趣区

Get和Post的区别

post 和 get 差别最核心的一点是:
缓存机制的不同(能否被浏览器缓存)缓存机制这里我们用到了开头所讲的幂等性概念。由于网络的不可靠,使得等幂性显得特别重要,因此 get、head、put、delete 一定要设计成等幂的:如果一次请求,服务器收到处理以后,客户端没有收到相应,客户端会再次请求,如果没有等幂性保障,就会发生意想不到的问题。post 是不等幂的,例如在 segmentfault 上两次提交相同的文章,则会产生两个资源。
通常 HTTP 缓存只适用于 idempotent request(幂等的请求),对于其他类型的响应则无能为力。
get 请求的缓存过程
第一次请求时,返回数据。返回数据,在 http 头部中包含 last-modified(最后修改的时间) Etag(指示资源的状态的唯一标识)Expires(指示资源在浏览器缓存中的过期时间) 然后浏览器会将请求回的文件放在 Cache 目录下,并保存上述信息发起第二次请求。浏览器会先检查 Cache 目录中是否有该文件,并且是否过期。同时满足这两个条件,则浏览器不会在向服务器发送请求,而是直接使用缓存中的文件。否则,浏览器会发送请求服务器,并在头部添加 If-Modified-Since 和 If-None-Match。如果文件从上次访问至今都没有被修改过或 Etag 信息没有变化,则直接返回一个 304 的状态,表明服务器端允许请求访问资源,但不满足条件,返回不包含任何响应的主体部分。

退出移动版