HTTP斷點續傳


 

 

一、概述
 
所謂斷點續傳,其實只是指下載,也就是要從文件已經下載的地方開始繼續下載。在以前版本的HTTP協議是不支持斷點的,HTTP/1.1開始就支持了。一般斷點下載時才用到Range和Content-Range實體頭。 HTTP協議本身不支持斷點上傳,需要自己實現。
 
二、Range 
 
用於請求頭中,指定第一個字節的位置和最后一個字節的位置,一般格式:
 
Range:bytes=[first byte pos]-[last byte pos] 
 
1.以下幾點需要注意:
(1)這個數據區間是個閉合區間,起始值是0,所以“Range: bytes=0-1”這樣一個請求實際上是在請求開頭的2個字節。
(2)“Range: bytes=-200”,它不是表示請求文件開始位置的201個字節,而是表示要請求文件結尾處的200個字節。
(3)如果last byte pos小於first byte pos,那么這個Range請求就是無效請求,server需要忽略這個Range請求,然后回應一個200,把整個文件發給client。
(4)如果last byte pos大於等於文件長度,那么這個Range請求被認為是不能滿足的,server需要回應一個416,Requested range not satisfiable。
 
2.示例解釋:
表示頭500個字節:bytes=0-499  
表示第二個500字節:bytes=500-999  
表示最后500個字節:bytes=-500  
表示500字節以后的范圍:bytes=500-  
第一個和最后一個字節:bytes=0-0,-1  
同時指定幾個范圍:bytes=500-600,601-999 
 
三、Content-Range
 
用於響應頭,指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在服務器向客戶返回一個部分響應,它必須描述響應覆蓋的范圍和整個實體長度。一般格式: 
 
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth] 
 
四、Header示例
 
請求下載整個文件: 
 
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:文件總大小


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM