HTTP檔案斷點續傳的原理

2021-08-11 11:36:14 字數 1506 閱讀 7665

我一細想,這個問題壓根不需要通過改變現有介面提供更多的資料來做.下面從原理實現上簡單說下:

關鍵點:

對於斷點續傳,關鍵點是兩個:

檔案變化感知:

前置業務介面方案:

對於關鍵點1,對於決定大部分產品的業務場景,可以通過前置業務介面解決;這裡簡單介紹一下:

htpp 標準etag方案:

etag原理:如果url上的資源內容改變,乙個新的不一樣的etag就會被分配。用這種方法使用etag即類似於指紋

,並且他們能夠被快速地被比較,以確定兩個版本的資源是否相同。etag的比較只對同乙個url有意義——不同url上的資源的etag值可能相同也可能不同,從他們的etag的比較中無從推斷。

etag是http的乙個可選字段,且沒有規範他的實現;實際上業內用的比較多的就是使用md5簽名的方式來生成(linux shell md5sum)

典型用法:

server端: nginx >1.3.3 自帶有etag的module , 當然同時也可以在業務**裡setheaders加乙個etag欄位

client端:

第一次請求時:

第二次請求(斷點續傳時):

如果etag值匹配,這就意味著資源沒有改變,伺服器便會傳送回乙個極短的響應,包含http 「304 未修改」的狀態。304狀態告訴客戶端,它的快取版本是最新的,並應該使用它。

然而,如果etag的值不匹配,這就意味著資源很可能發生了變化,那麼,乙個完整的響應就會被返回,包括資源的內容,就好像etag沒有被使用。這種情況下,客戶端可以用新返回的資源和新的etag替代先前的快取版本。

續傳支援:

對於乙個c/c++程式設計師,第一時間會得出乙個系統級實現方案:

1. 客戶端傳當前的offset

2. server端seek到檔案特定的offset開始讀取往http connection吐資料

不過我們深處在乙個開放方案和標準不斷完善的時代,不需要自己實現乙個(這也是像我這樣的c/c++研發工程師越來越沒落的原因),來看看http協議是怎麼解決這個問題的:

http頭range欄位:

來個簡單粗暴的例子

衍生閱讀:

使用etags減少web應用頻寬和負載

HTTP斷點續傳原理

作為一名程式媛我也想快點進步,希望慢慢積累吧。給自己加加油。1.斷點續傳的必要性 2.了解斷點續傳之前,了解下http協議。http hyper text transfer protocol 協議是用於從全球資訊網 www 伺服器傳輸超文字到本地瀏覽器的傳送協議。它是基於tcp ip協議來傳遞資料的...

http斷點續傳原理

這周完成了乙個斷點續傳的功能。我們的遊戲裡載入地圖的邏輯簡化而言是這樣 1.首先用本地的md5檔案校驗地 件 很多檔案 是否完整。中間有很多步驟,任何步驟失敗都認為地圖不完整 2.如果完整,直接載入地圖。3.如果不完整,需要通過乙個http協議請求後台伺服器傳回完整的地圖。要解決這個問題,要了解以下...

HTTP的斷點續傳原理

accept ranges 由server傳送給client時需要的關鍵字。表明是否支援斷點續傳。accept ranges none 表示不支援斷點續傳 accept ranges bytes 表示支援以bytes為單位進行傳輸 content ranges 由server傳送給client時需要...