幂等的概念

在理解这两者的区别前需要先了解的概念:

幂等性
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
简单的说就是,浏览器发起一次请求和多次请求,不会改变目标资源的状态,也可以说是:浏览器进行了缓存。

post与get的差别

这是在网上找到的post请求与get请求的差别对比图:
图片描述

但个人认为post和get差别最核心的一点是:

缓存机制的不同(能否被浏览器缓存)

缓存机制

这里我们用到了开头所讲的幂等性概念。由于网络的不可靠,使得等幂性显得特别重要,因此getheadputdelete一定要设计成等幂的:如果一次请求,服务器收到处理以后,客户端没有收到相应,客户端会再次请求,如果没有等幂性保障,就会发生意想不到的问题。
post是不等幂的,例如在segmentfault上两次提交相同的文章,则会产生两个资源。

通常HTTP 缓存只适用于 idempotent request(幂等的请求),对于其他类型的响应则无能为力。

get请求的缓存过程

  1. 第一次请求时,返回数据。
    返回数据,在http头部中包含last-modified(最后修改的时间) Etag(指示资源的状态的唯一标识)Expires(指示资源在浏览器缓存中的过期时间)
  2. 然后浏览器会将请求回的文件放在Cache目录下,并保存上述信息
  3. 发起第二次请求。
    浏览器会先检查Cache目录中是否有该文件,并且是否过期。同时满足这两个条件,则浏览器不会在向服务器发送请求,而是直接使用缓存中的文件。
    否则,浏览器会发送请求服务器 ,并在头部添加If-Modified-Since 和 If-None-Match。
    如果文件从上次访问至今都没有被修改过或Etag信息没有变化,则直接返回一个304的状态,表明服务器端允许请求访问资源,但不满足条件,返回不包含任何响应的主体部分。

解决办法:http://blog.csdn.net/u0128368...


鱼摆摆plus
8 声望0 粉丝

学而时习之