?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
HTTP范圍請求允許將HTTP消息的一部分從服務器發(fā)送到客戶端。例如,部分請求可用于大型媒體或下載具有暫停和恢復功能的文件。
如果Accept-Ranges
存在于HTTP響應中(并且其值不是“ none
”),則服務器支持范圍請求。例如,您可以通過發(fā)出一個HEAD
請求和cURL 來檢查。
curl -I http://i.imgur.com/z4d4kWk.jpg HTTP/1.1 200 OK...Accept-Ranges: bytes Content-Length: 146515
在此響應中,Accept-Ranges: bytes
指示字節(jié)可用作單位來定義范圍。這里Content-Length
頭部也很有用,因為它表示要檢索的圖像的完整大小。
如果網站忽略Accept-Ranges
頭部,他們可能不支持部分請求。有些網站還明確發(fā)送“ none
”作為價值,表示不支持。在某些應用程序中,下載管理器在這種情況下禁用它們的暫停按鈕。
curl -I https://www.youtube.com/watch?v=EwTZ2xpQwpA HTTP/1.1 200 OK...Accept-Ranges: none
如果服務器支持范圍請求,則可以使用Range
標題發(fā)出此類請求。它表示服務器應該返回的文檔的部分。
我們可以從資源請求一個范圍。再次,我們可以使用cURL來測試請求。“ -H
”選項將向請求附加一個標題行,在這種情況下,該Range
標題是請求前1024個字節(jié)的標題。
curl http://i.imgur.com/z4d4kWk.jpg -i -H "Range: bytes=0-1023"
發(fā)出的請求如下所示:
GET /z4d4kWk.jpg HTTP/1.1Host: i.imgur.com Range: bytes=0-1023
服務器響應206
Partial Content
狀態(tài):
HTTP/1.1 206 Partial Content Content-Range: bytes 0-1023/146515Content-Length: 1024...(binary content)
的Content-Length
報頭現(xiàn)在指示所請求的范圍的大?。ǘ皇菆D像的全尺寸)。的Content-Range
響應報頭指示,其中在全資源此部分消息所屬。
該Range
頭還允許您在多文檔中同時獲得多個范圍。范圍用逗號分隔。
curl http://www.example.com -i -H "Range: bytes=0-50, 100-150"
服務器響應206
Partial Content
狀態(tài)和Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
標題,指示多部分字節(jié)范圍如下。每部分包含其自己的Content-Type
和Content-Range
領域以及所需的邊界參數(shù)指定用于每個本體部分分開的邊界字符串。
HTTP/1.1 206 Partial Content Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 Content-Length: 282--3d6b6a416f9b5 Content-Type: text/html Content-Range: bytes 0-50/1270<!doctype html><html><head> <title>Example Do--3d6b6a416f9b5 Content-Type: text/html Content-Range: bytes 100-150/1270eta http-equiv="Content-type" content="text/html; c--3d6b6a416f9b5--
當恢復請求資源的更多部分時,您需要確保自從收到最后一個片段以來,存儲的資源未被修改。
的If-Range
HTTP請求報頭使得范圍請求的條件:如果條件被滿足,該范圍的請求將被發(fā)出,并且服務器發(fā)送回一個206
Partial Content
與適當?shù)纳眢w的答案。如果條件未滿足,則會返回具有200
OK
狀態(tài)的完整資源。這個頭文件可以與Last-Modified
驗證器一起使用,也可以與一個ETag
,但不與兩者一起使用。
If-Range: Wed, 21 Oct 2015 07:28:00 GMT
在處理范圍請求時,有三種相關的狀態(tài):
如果成功請求范圍,206
Partial Content
狀態(tài)將從服務器返回。
如果范圍請求超出范圍(范圍值與資源的范圍重疊),則服務器以416
Requested Range Not Satisfiable
狀態(tài)進行響應。
如果不支持范圍請求,則200
OK
狀態(tài)將從服務器發(fā)回。
Transfer-Encoding
的Transfer-Encoding
報頭允許分塊編碼,其有用的,當大量數(shù)據(jù)被發(fā)送到客戶端和響應是未知的,直到請求已被完全處理的總大小。服務器立即向客戶端發(fā)送數(shù)據(jù),而不會緩沖響應或確定確切的長度,從而延長了延遲時間。范圍請求和分塊是兼容的,可以使用或不使用對方。