HTTP/1.1 Range和Content-Range

來源:互聯網
上載者:User

標籤:cond   分割   位元組   工具   多線程   byte   接收   htm   url   

HTTP/1.1 Range和Content-Range(註:轉載於http://www.91linux.com/html/article/program/cpp/20090411/16420.html)

 

假設你要開發一個多線程下載工具,你會自然的想到把檔案分割成多個部分,比如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/1.1 Range和Content-Range

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.