1. 程式人生 > >http斷點續傳原理:http頭 Range、Content-Range

http斷點續傳原理:http頭 Range、Content-Range

轉載自:http://www.liqwei.com/network/protocol/2011/886.shtml

轉載自:http://blog.csdn.net/pud_zha/article/details/7924929

所謂斷點續傳,也就是要從檔案已經下載的地方開始繼續下載。在以前版本的 HTTP 協議是不支援斷點的,HTTP/1.1 開始就支援了。一般斷點下載時才用到 Range 和 Content-Range 實體頭。

Range 

用於請求頭中,指定第一個位元組的位置和最後一個位元組的位置,一般格式:

Range:(unit=first byte pos)-[last byte pos] 

Content-Range

用於響應頭,指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在伺服器向客戶返回一個部分響應,它必須描述響應覆蓋的範圍和整個實體長度。一般格式: 

Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth] 

請求下載整個檔案: 

  1. GET /test.rar HTTP/1.1 
  2. Connection: close 
  3. Host: 116.1.219.219 
  4. Range: bytes=0-801 //一般請求下載整個檔案是bytes=0- 或不用這個頭

一般正常回應

  1. HTTP/1.1 200 OK 
  2. Content-Length: 801      
  3. Content-Type: application/octet-stream 
  4. Content-Range: bytes 0-800/801 //801:檔案總大小
轉載自:http://blog.csdn.net/pud_zha/article/details/7924929 假設你要開發一個多執行緒下載工具,你會自然的想到把檔案分割成多個部分,比如4個部分,然後建立4個執行緒,每個執行緒負責下載一個部分,如果檔案大小為403個byte,那麼你的分割方式可以為:0-99 (前100個位元組),100-199(第二個100位元組),200-299(第三個100位元組),300-402(最後103個位元組)。

      分割完成,每個執行緒都明白自己的任務,比如執行緒3的任務是負責下載200-299這部分檔案,現在的問題是:執行緒3傳送一個什麼樣的請求報文,才能夠保證只請求檔案的200-299位元組,而不會干擾其他執行緒的任務。這時,我們可以使用HTTP1.1的Range頭。Range頭域可以請求實體的一個或者多個子範圍,Range的值為0表示第一個位元組,也就是Range計算位元組數是從0開始的:

    表示頭500個位元組:Range: bytes=0-499
    表示第二個500位元組:Range: bytes=500-999
    表示最後500個位元組:Range: bytes=-500
    表示500位元組以後的範圍:Range: bytes=500-
    第一個和最後一個位元組:Range: bytes=0-0,-1
    同時指定幾個範圍:Range: bytes=500-600,601-999
所以,執行緒3傳送的請求報文必須有這一行:
Range: bytes=200-299

     伺服器接收到執行緒3的請求報文,發現這是一個帶有Range頭的GET請求,如果一切正常,伺服器的響應報文會有下面這行:
HTTP/1.1 206 OK
表示處理請求成功,響應報文還有這一行
Content-Range: bytes 200-299/403
斜槓後面的403表示檔案的大小,通常Content-Range的用法為:     . The first 500 bytes:
Content-Range: bytes 0-499/1234

     . The second 500 bytes:Content-Range: bytes 500-999/1234     . All except for the first 500 bytes:Content-Range: bytes 500-1233/1234     . The last 500 bytes:Content-Range: bytes 734-1233/1234

相關推薦

http斷點原理http RangeContent-Range

轉載自:http://www.liqwei.com/network/protocol/2011/886.shtml 轉載自:http://blog.csdn.net/pud_zha/article/details/7924929 所謂斷點續傳,也就是要從檔案已經下載的

http斷點原理

位置 解壓 md5 完成 不存在 狀態 失敗 來看 ID 這周完成了一個斷點續傳的功能。 我們的遊戲裏加載地圖的邏輯簡化而言是這樣: 1.首先用本地的md5文件校驗地圖文件(很多文件)是否完整。(中間有很多步驟,任何步驟失敗都認為地圖不完整) 2.如果完整,直接加載地圖。

http斷點與檔案下載原理解析

 一、斷點續傳的原理        其實斷點續傳的原理很簡單,就是在http的請求上和一般的下載有所不同而已。        打個比方,瀏覽器請求伺服器上的一個文時,所發出的請求如下: ? get /down.zip http/1.1 accept: image/gif, image/x-

http斷點

http斷點續傳斷點續傳 從下載斷開的位置,繼續下載,直到下載完整 四個必須的HTTP頭域 Range用於請求頭中,指定第一個字節的位置和最後一個字節的位置,一般格式:Range:(unit=first byte pos)-[last byte pos] Range : bytes=50-

關於http斷點那點事

一、斷點續傳     所謂斷點續傳,即在檔案傳輸過程中,由於主動或者被動原因中斷了傳輸過程。下一次重新建立連線,不需要從頭開始繼續下載。這個流程就可以稱之為斷點續傳。     斷點續傳流程可以歸納為:將任務(一個檔案或壓縮包)人為的劃分為一個或多個部分,每一個部分採用一個

HTTP 斷點(分塊傳輸)

簡述 斷點續傳:指的是在上傳/下載時,將任務(一個檔案或壓縮包)人為的劃分為幾個部分,每一個部分採用一個執行緒進行上傳/下載,如果碰到網路故障,可以從已經上傳/下載的部分開始繼續上傳/下載未完成的部分,而沒有必要從頭開始上傳/下載。可以節省時間,提高速度。

Java Http斷點(下載)

package **********; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.Rando

HTTP檔案上伺服器-支援超大檔案HTTP斷點的實現辦法

      最近由於筆者所在的研發集團產品需要,需要支援高效能的大檔案http上傳,並且要求支援http斷點續傳。筆者在以前的部落格如何實現支援大檔案的高效能HTTP檔案上傳伺服器已經介紹了實現大檔案上傳的一些基本概念,其實非常簡單,這裡在簡要歸納一下,方便記憶:伺服器端由C

HTTP斷點斷點之 -- 檔案流操作

不管是下載還是上傳,斷點的時候,就需要對檔案流進行精確的操作。 1、下載斷開了,已經下載的資料儲存到檔案,再次繼續下載的時候需要從檔案的尾巴繼續追加資料; 2、同理上傳也是一樣,http通訊中有可能斷開或者丟包的情況,就需要重傳指定的檔案片; 我封裝的這個

11_斷點原理

哪裏 一次 多少 內存 什麽 第一個 int 多線程下載 問題 斷點續傳得把下載到的位置給它記錄下來。通過什麽記?記在哪裏?記在內存裏行不行?用迅雷下了藍光電影,動輒就好幾個GB.下了一個GB突然間改早了沒網了,這個時候你放在內存裏面電腦一關所有的內容就都沒有了,下一次還得

IOS 下載檔案斷點原理與實現(附原始碼)

在網路狀況不好的情況下,對於檔案的傳輸,我們希望能夠支援可以每次傳部分資料。首先從檔案傳輸協議FTP和TFTP開始分析, FTP是基於TCP的,一般情況下建立兩個連線,一個負責指令,一個負責資料;而TFTP是基於UDP的,由於UDP傳輸是不可靠的,雖然傳輸速度很快,但對於普通的檔案像PDF這種,少了一個

android多執行緒斷點原理解析

在下載大檔案的時候,我們往往要使用多執行緒斷點續傳,保證資料的完整性下面我來解析一下多執行緒斷點續傳的原理首先說多執行緒,我們要多執行緒下載一個大檔案,就有開啟多個執行緒,多個connection,既然是一個檔案分開幾個執行緒來下載,那肯定就是一個執行緒下載一個部分,不能重複那麼我們這麼確定一個執行緒下載一部

HTTP檔案斷點原理

前幾天一個同事跑過來找我說,我們在廣告素材視訊這塊想做斷點續傳,就是這次某個視訊快取到一半,下次不用重頭開始,可以在原來停留得位置開始繼續下載.以提供更好的使用者體驗。 同時說需要我們支援吐素材地址的業務介面告訴終端最後修改時間/檔案簽名(md5),用這個用來判斷我當前要下的檔案有沒有變化,同時告訴終端檔案

linux下wget命令,支持斷點,ftphttphttps等協議

strong 工作 等待 命名 wget命令 source cmd itl 操作 轉載的地址:http:[email protected]/* *//blog/static/32097310201171833420905/ 今天操作遠端機器的時候發現少一個安裝

用Java實現斷點 (HTTP)

斷點續傳的原理 其實斷點續傳的原理很簡單,就是在 Http 的請求上和一般的下載有所不同而已。 打個比方,瀏覽器請求伺服器上的一個文時,所發出的請求如下: 假設伺服器域名為 www.sjtu.edu.cn,檔名為 down.zip。 GET /down.zip HTTP/1

Java servlet 簡單實現http檔案下載斷點功能

斷點續傳,聽上去似乎是個比較高階的話題,本文只講述一下http版的斷點續傳,其他協議的大家可以自行研究。 http協議中,服務端實現斷點續傳首先需要讀取客戶端傳送的Range頭資訊,比如“Range: bytes=12583394-”這個就是指原來正在下載的檔案需要從第12

關於ftp和http下載斷點

FTP下載斷點續傳import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; i

Java 實現斷點 (HTTP)

公司需要用Java做斷點續傳的實現,沒有接觸過,不過根據自己的理解就是檔案接著上次傳輸的繼續完成傳輸,具體的操作看到IBM這位仁兄的例子。 1、斷點續傳的原理 其實斷點續傳的原理很簡單,就是在 Http 的請求上和一般的下載有所不同而已。  打個比方,瀏覽器請求伺服

java http大檔案斷點

1,專案調研 因為需要研究下斷點上傳的問題。找了很久終於找到一個比較好的專案。 在GoogleCode上面,程式碼弄下來超級不方便,還是配置hosts才好,把程式碼重新上傳到了github上面。 效果: 上傳中,顯示進度,時間,百分比。 點選【Pause

http range實現斷點斷點載)

使用http range實現斷點續傳(伺服器端): public void downRangeFile( File downloadFile, HttpServletResponse response,