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