4.12 If-Range

作者:肖鹏-SpiritLing 时间:2018-11-24

If-Range 字段值若是更 ETge 值或更新日期时间一致,那么就作为范围请求处理。若不一致,则忽略范围请求,返回全部资源。

首部字段 If-Range 属于附带条件之一。它告知服务器若指定 If-Range 字段值(与 ETge 值或者时间)和请求资源的 ETge 值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。


如果不使用 If-Range 时,则需要进行两次请求

客户端 数据包 服务器
==> GET: / ==
==> If-Match: "123456" ==
==> Range: 5001-10000 ==
== 412 Precondition Failed <==
== (你请求的资源已经没有了,重新发送请求) <==
==> GET: / ==
== 200 OK <==
== ETge: "54234" <==

服务器端的资源如果更新,那客户端持有资源中的一部分也会随之无效,当然,范围请求作为前提也是无效的。这时,服务器会暂且以状态码 412 Precondition Failed 作为响应返回,其目的是催促客户端再次发送请求。这样一来,与使用首部字段 If-Range 比起来,就需要花费两倍功夫。

作者:肖鹏-SpiritLing 时间:2018-11-24

author image
SpiritLing