HTTP斷點續傳實現

一. 兩個必要響應頭Accept-Ranges、ETag

        客戶端每次提交下載請求時,服務端都要添加這兩個響應頭,以保證客戶端和服務端將此下載識別爲可以斷點續傳的下載:
Accept-Ranges:告知下載客戶端這是一個可以恢復續傳的下載,存放本次下載的開始字節位置、文件的字節大小;
ETag:保存文件的唯一標識(我在用的文件名+文件最後修改時間,以便續傳請求時對文件進行驗證);
Last-Modified:可選響應頭,存放服務端文件的最後修改時間,用於驗證


二. 一個重要請求頭Range
Range:首次下載時,Range頭爲null,此時服務端的響應頭中必須添加響應頭Accept-Ranges、ETag;
              續傳請求時,其值表示客戶端已經收到的字節數,即本次下載的開始字節位置,服務端依據這個 值從相應位置讀取數據發送到客戶端。

三. 用於驗證的請求頭If-Range、
       當響應頭中包含有Accept-Ranges、ETag時,續傳請求時,將包含這些請求頭:
If-Range:對應響應頭ETag的值;
Unless-Modified-Since:對應響應頭Last-Modified的值。
        續傳請求時,爲了保證客戶端與服務端的文件的一致性和正確性,有必要對文件進行驗證,驗證需要自己寫驗證代碼,就根據解析這兩個請求頭的值,將客戶端已下載的部分與服務端的文件進行對比,如果不吻合,則從頭開始下載,如果吻合,則斷點續傳。

四.  速度限制
        程序中加入了速度限制,用於對客戶端進行權限控制的流量限制。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章