斷點(diǎn)續(xù)傳-http協(xié)議里Header參數(shù)Range

原理

將文件數(shù)據(jù)按照請求要求,分成一段一段的下載。類似于我們常見的分頁顯示。
斷點(diǎn)續(xù)傳的好處,防止大文件下載過程出現(xiàn)網(wǎng)絡(luò)異常,而前功盡棄。缺點(diǎn)是要發(fā)起多次請求,資源占用大,相對復(fù)雜

參數(shù)說明

請求頭

Range:告知服務(wù)端,客戶端下載該文件想要從指定的位置開始下載,至于 Range 字段屬性值的格式有以下幾種:

Range:bytes=0-500   
表示下載從0到500字節(jié)的文件,即頭500個字節(jié)  ,[0-500]前閉后閉。0<=range<=500 
    
Range:bytes=501-1000
表示下載從500到1000這部分的文件,單位字節(jié)       

Range:bytes=-500
表示下載最后的500個字節(jié)      
     
Range:bytes=500-
表示下載從500開始到文件結(jié)束這部分的內(nèi)容   
 
Range:bytes=500-600,700-1000
表示下載這兩個區(qū)間的內(nèi)容

If-Range:用于判斷實體是否發(fā)生改變,如果實體未改變,服務(wù)器發(fā)送客戶端丟失的部分,否則發(fā)送整個實體.
If-Range 可以使用 Etag 或者Last-Modified 返回的值。當(dāng)沒有 ETag 卻有 Last-modified 時,可以把 Last-modified 作為 If-Range 字段的值。
如果請求報文中的 Etag與服務(wù)器目標(biāo)內(nèi)容的 Etag相等,即沒有發(fā)生變化,那么應(yīng)答報文的狀態(tài)碼為 206。如果服務(wù)器目標(biāo)內(nèi)容發(fā)生了變化,那么應(yīng)答報文的狀態(tài)碼為 200

if-range是etag的值

響應(yīng)頭

Content-Length:只表示此鏈接中下載的文件大小
Content-Range:用于告知客戶端此鏈接下載的文件是哪個部分的,以及文件的總大小。

Content-Range:bytes 501-1000/2000
#501-100 請求頭里range的值
#2000 文件總大小
#bytes 字節(jié)方式

Last-Modified:表示資源最近修改的時間(分段下載時要注意這個東西,因為如果修改了,分段下載可能就要重新下載了)
ETag:這個響應(yīng)頭表示資源版本的標(biāo)識符,通常是消息摘要(類似MD5一樣)(分段下載時要注意這個東西,或者緩存控制也要注意這個東西)
注意,每種服務(wù)器對生成ETag的算法不同,這個要特別注意 如果使用分布式緩存,要特別要保證每臺服務(wù)器生成的ETag算法是一致的.
緩存的過期,要同時結(jié)合(ETag + Last-Modified)這兩個響應(yīng)頭來判斷.
強(qiáng)ETag
只要實體發(fā)生任何改變,都會改變ETag值.如:
ETag: &quot;1234234234&quot;
ETag
它在前面會有個W/,如:
ETag: W/&quot;12342423&quot;

測試

第一次請求Range:bytes=0-12000

image.png

從請求信息可以看出我們請求的資源大小是0-12000的字節(jié)。
從響應(yīng)頭信息可以看出EtagLast-Modified信息。
Content-Range:bytes 0-12000/119319
文件大小是119319字節(jié)大小
打開下載的文件。
image.png

文件只顯示0-12000的部分

第二次請求Range:bytes=12001-3600

image.png

EtagModified的值是沒有變。
打開下載的圖片
image.png

第三次次請求Range:bytes=5000-66000

這次請求range范圍和前面的有交集,下載內(nèi)容也是交集。


image.png

第四次請求Range:bytes=66001-

下載66001及剩下所有數(shù)據(jù)。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Web 頁面的實現(xiàn) Web 基于 HTTP 協(xié)議通信 客戶端(Client)的 Web 瀏覽器從 Web 服務(wù)器端...
    毛圈閱讀 1,301評論 0 2
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協(xié)議是指計算機(jī)通信網(wǎng)絡(luò)中兩臺計算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,782評論 2 20
  • 通常HTTP消息包括客戶機(jī)向服務(wù)器的請求消息和服務(wù)器向客戶機(jī)的響應(yīng)消息。這兩種類型的消息由一個起始行,一個或者多個...
    中二修行者閱讀 4,418評論 0 1
  • API定義規(guī)范 本規(guī)范設(shè)計基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高,建議使用雙通...
    有涯逐無涯閱讀 2,917評論 0 6
  • 這哥們只有在一定的高溫才能存在。寂寞。塑性好。鋼的加工在此狀態(tài)下進(jìn)行。所以,鋼的加熱過程就是奧氏體的形成過程。
    孔李聃丘閱讀 246評論 0 0

友情鏈接更多精彩內(nèi)容