# 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
- 首语
- 第一章 HTTP协议及网络基础
- 第二章 协议返回状态码
- 第三章 HTTP通用首部字段
- 第一节 Cache-Control字段
- 第二节 Connection 字段
- 第三节 Date 字段
- 第四节 Pragma 字段
- 第五节 Trailer 字段
- 第六节 Transfer-Encoding 字段
- 第七节 Upgrade 字段
- 第八节 Via 字段
- 第九节 Warning 字段
- 第四章 HTTP请求首部字段
- 第一节 Accept 字段
- 第二节 Accept-Charset 字段
- 第三节 Accept-Encoding 字段
- 第四节 Accept-Language 字段
- 第五节 Authorization 字段
- 第六节 Expect 字段
- 第七节 From 字段
- 第八节 Host 字段
- 第九节 If-Match 字段
- 第十节 If-Modified-Since 字段
- 第十一节 If-None-Match 字段
- 第十二节 If-Range 字段
- 第十三节 If-Unmodified-Since 字段
- 第十四节 Max-Forwards 字段
- 第十五节 Proxy-Authorization 字段
- 第十六节 Range 字段
- 第十七节 Referer 字段
- 第十八节 TE 字段
- 第十九节 User-Agent 字段
- 第五章 HTTP响应首部字段
- 第一节 Accept-Ranges 字段
- 第二节 Age 字段
- 第三节 ETge 字段
- 第四节 Location 字段
- 第五节 Proxy-Authenticate 字段
- 第六节 Retry-After 字段
- 第七节 Server 字段
- 第八节 Vary 字段
- 第九节 WWW-Authenticate 字段
- 第六章 HTTP实体首部字段
- 第一节 Allow 字段
- 第二节 Content-Encoding字段
- 第三节 Content-Language 字段
- 第四节 Content-Length 字段
- 第五节 Content-Location 字段
- 第六节 Content-MD5 字段
- 第七节 Content-Range 字段
- 第八节 Content-Type 字段
- 第九节 Expires 字段
- 第十节 Last-Modified 字段
- 第七章 Cookie相关和其他的首部字段