# 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相關和其他的首部字段