HTTP 請求頭 Range 信息

請求資源的部分內容,單位是 byte(字節),從0開始。
如果請求頭攜帶了 Range 信息,也就是分批下載,這時候服務器會返回 206 Partial Content 的狀態碼及說明。

如果服務器不支持分批下載,那麼會返回整個資源的大小以及狀態碼爲200。

Range 請求頭

Range: bytes=start-end

例如:

Range: bytes=10- //:從第10個字節開始到最後一個字節的數據
Range:bytes=20-39 //:從第20個字節到第39個字節之間的數據

注意:整個表示 [start, end] 是前閉後閉的,也就是包含請求頭的 start 和 end。所以下次請求應該是 [end+1, nextEnd]。

Content-Range 響應頭

Content-Range:bytes 0-10/3000
表示服務器返回了前(0-10)個字節的數據,總共3000字節的數據。

Content-Type 數據類型

Content-Type:image/png 表示資源類型是 png 格式的圖片

Content-Length 資源的長度

Content-Length:11 表示服務器響應了11個字節的數據

Last-Modified

Last-Modified:Tue, 30 Jun 2018 03:12:48 GMT 表示資源最近被修改的時間,如果分批下載的時候發現 Last-Modified 被修改了,那麼需要重新下載

ETag

ETag: W/"3103-1435633968000" 表示資源版本的標示符。通常是消息摘要(類似MD5)。分段下載時需要注意,或者緩存控制也需要注意。如果是分佈式緩存系統,需要確保每臺計算機的 ETag 計算規則的一致性,緩存的過期需要結合 ETag 和 Last-Modified 共同決定。

分段下載

利用 HTTP 的頭信息的上述幾個特點,我們可以充分利用多線程的能力。

  • 先發送一個 HEAD 方法的請求,知道總文件大小(Content-Length 就是總字節大小)
  • 多線程下載(線程1:Range:bytes=0-100,線程2:Range:bytes=100-200,…)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章