# 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