http斷點續傳原理

斷點續傳一是斷點,一續傳。html

斷點是在下載時,將下載文件分多片,同時進行多片一塊兒下載,若是任務被暫停,暫停的位置就是斷點。數據庫

續傳就是未完成的下載再次開始時,會從上次的斷點繼續傳送。瀏覽器

在下載(或上傳)過程當中,若是網絡故障、電量不足等緣由致使下載中斷,這就須要使用到斷點續傳功能。服務器

下次啓動時,能夠從記錄位置(已經下載的部分)開始,繼續下載之後未下載的部分,避免重複部分的下載。斷點續傳實質就是能記錄上一次已下載完成的位置。網絡

斷點續傳須要在下載過程當中記錄每條線程的下載進度;
每次下載開始以前先讀取數據庫,查詢是否有未完成的記錄,有就繼續下載,沒有則建立新記錄插入數據庫;
在每次向文件中寫入數據以後,在數據庫中更新下載進度;
下載完成以後刪除數據庫中下載記錄。
 
斷點續傳在HTTP請求上和通常的下載有所不一樣,客戶端瀏覽器傳給Web服務器的時候要多加一條信息——從哪裏開始(HTTP請求變量)。要實現HTTP斷點續傳,Web服務器必須支持HTTP/1.1(相對於HTTP/1.0老版本)。
  HTTP請求是有一個Header的,裏面有個Range屬性是定義下載區域的,它接收的值是一個區間範圍,好比:Range:bytes=0-10000。這樣咱們就能夠按照必定的規則,將一個大文件拆分爲若干很小的部分,而後分批次的下載,每一個小塊下載完成以後,再合併到文件中;這樣即便下載中斷了,從新下載時,也能夠經過文件的字節長度來判斷下載的起始點,而後重啓斷點續傳的過程,直到最後完成下載過程。
 
參考:http://blog.csdn.net/hou_jiong/article/details/4406155
http://blog.163.com/playkid/blog/static/562872602013326115648172/
 

斷點續傳,也就是要從文件已經下載的地方開始繼續下載。因此在客戶端瀏覽器傳給Web服務器的時候要多加一條信息--從哪裏開始。 app

    下面是用本身編的一個"瀏覽器"來傳遞請求信息給Web服務器,要求從2000070字節開始。.net

    GET /down.zip HTTP/1.0 線程

    User-Agent: Netfront3htm

    RANGE: bytes=2000070- blog

    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 

    多了一行RANGE: bytes=2000070-;

    這一行的意思就是告訴服務器down.zip這個文件從2000070字節開始傳,前面的字節不用傳了。

 

    服務器收到這個請求之後,返回的信息以下: 

    206 

    Content-Length=106786028 

    Content-Range=bytes 2000070-106786027/106786028 

    Date=Mon, 30 Apr 2001 12:55:20 GMT 

    ETag=W/"02ca57e173c11:95b" 

    Content-Type=application/octet-stream 

    Server=Microsoft-IIS/5.0 

    Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 

    增長了一行: 

    Content-Range=bytes 2000070-106786027/106786028 

相關文章
相關標籤/搜索