(七)条件请求If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since

条件请求:当请求中有If-XXX时,服务器会对附加的条件进行判断,只有判定条件为真,才会执行请求。

验证器

所有的条件请求首部都是试图去检测服务器上存储的资源是否与某一特定版本相匹配。为了达到这个目的,条件请求需要指明资源的版本。由于逐个字节去比较完整资源是不切实际的,况且这也并非总是想要的结果,所以在请求中会传递一个描述资源版本的值。这些值称为“验证器”,并且分为两大类:

  • 文件的最后修改时间,即 last-modified (最后修改)时间。
  • 一个意义模糊的字符串,指代一个独一无二的版本,称为“实体标签”,或者 etag 。

两大重要应用

  • 缓存更新 
  • 断点续传

例子参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Conditional_requests

Accept-Ranges:bytes 表示服务器能够处理范围请求

If-XXX:状态码参考:https://www.cnblogs.com/liyongchao-0508/p/7113073.html

一、If-Match

  • 服务端有个ETag(实体标记)的字段,与特定资源关联的确定值,当资源更新后Etag也会随之更新。

所以当客户端If-Match的值若与服务端的ETag一致,才会执行请求,否则会拒绝412

 

二、If-Modified-Since

If-Modified-Since会告知服务器若If-Modifed-Since字段值早于资源的更新时间,则希望服务端能处理该请求;

若If-Modifed-Since字段值晚于资源的更新时间,则返回状态码304 Not Modified的响应

作用:用于确定代理或客户端拥有的本地资源的有效性。

 三、If-None-Match

与If-Match相反

四、If-Range

它告知服务器若指定的If-Range字段值和请求资源的ETag值一致时,则作为范围请求处理,否则返回全部资源

(这样做也是合理的,因为ETag不变,说明资源未变,则直接返回客户端请求的资源即可;若资源改变,请求的部分资源没有了,应该返回所有的新资源)

若不用If-Range,则需要发两次请求。因为若资源改变,会返回客户端412;客户端再发起请求,获得新资源

 

五、If-Unmodified-Since 

 

posted @ 2019-03-15 19:55  测试开发分享站  阅读(722)  评论(0编辑  收藏  举报