IE的自帶下載功能中沒有斷點續傳功能,要實現斷點續傳功能,需要用到HTTP協議中鮮為人知的幾個響應頭和請求頭。一. 兩個必要響應頭Accept-Ranges、ETag 客戶端每次提交下載請求時,服務端都要添加這兩個響應頭,以保證客戶端和服務端將此下載識別為可以斷點續傳的下載:Accept-Ranges:告知下載客戶端這是一個可以恢復續傳的下載,存放本次下載的開始字節位置、文件的字節大小;ETag:保存文件的唯一標識(我在用的文件名+文件最后修改時間,以便續傳請求時對文件進行驗證);Last-Modified:可選響應頭,存放服務端文件的最后修改時間,用于驗證二. 一個重要請求頭RangeRange:首次下載時,Range頭為null,此時服務端的響應頭中必須添加響應頭Accept-Ranges、ETag; 續傳請求時,其值表示客戶端已經收到的字節數,即本次下載的開始字節位置,服務端依據這個 值從相應位置讀取數據發送到客戶端。三. 用于驗證的請求頭If-Range、 當響應頭中包含有Accept-Ranges、ETag時,續傳請求時,將包含這些請求頭:If-Range:對應響應頭ETag的值;Unless-Modified-Since:對應響應頭Last-Modified的值。 續傳請求時,為了保證客戶端與服務端的文件的一致性和正確性,有必要對文件進行驗證,驗證需要自己寫驗證代碼,就根據解析這兩個請求頭的值,將客戶端已下載的部分與服務端的文件進行對比,如果不吻合,則從頭開始下載,如果吻合,則斷點續傳。四. 速度限制 程序中加入了速度限制,用于對客戶端進行權限控制的流量限制。五. 其它注意事項 如:文件名亂碼的問題、文件名中空格變加號、強制客戶端顯示下載對話框等,詳見源碼注釋:
java代碼
轉自:http://m.survivalescaperooms.com/gjahead/archive/2007/06/18/787654.html
新聞熱點
疑難解答