1. 程式人生 > >http斷點續傳

http斷點續傳

http斷點續傳

斷點續傳

從下載斷開的位置,繼續下載,直到下載完整

四個必須的HTTP頭域

  • Range
    用於請求頭中,指定第一個字節的位置和最後一個字節的位置,一般格式:
    Range:(unit=first byte pos)-[last byte pos]
    Range : bytes=50- 從第50個字節開始到最後一個字節
    Range : bytes=-70 最後的70個字節
    Range : bytes=50-100 從第50字節到100字節

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

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

  • Accept-Ranges
    Accept-Ranges:bytes // 告訴客戶端支持斷點傳輸

  • Content-Length
    內容長度

HTTP返回碼

200 OK(一切正常)
206 Partial Content(服務器已經成功處理了部分內容)
416  Requested Range Not Satisfiable 對方(客戶端)發來的Range 請求頭不合理

實例1

請求:

GET /123.zip HTTP/1.1   

響應:

HTTP/1.1 200 OK 
Accept-Ranges : bytes   //告訴客戶端支持斷點傳輸
Content-Length : 1900 //文件總大小 
Content-Type : image/jpeg //文件類型

中間停止下載,重新發起請求
請求:

    GET /123.zip HTTP/1.1 
    Range:bytes=580-

響應:

HTTP/1.1 206 Partial Content
Accept-Ranges : bytes
Content-Type : image/jpeg //文件類型
Content-Length : (1900 - 580) //長度則不是總長度了,而580到1900共有多少字節。
Content-Range :bytes 580-(1900-1 ) / 1900   //因為到了文件總大小了,所以指定範圍永遠不能超過等於總大小;但是到了最後一個字節必須輸出出去,完全是寫法問題。

實例2

請求:

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

一般正常回應

HTTP/1.1 200 OK 
Content-Length: 801      
Content-Type: application/octet-stream 
Content-Range: bytes 0-800/801 //801:文件總大小

http斷點續傳