HTTP断点续传
一、概述
所謂斷點續(xù)傳,其實只是指下載,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。在以前版本的HTTP協(xié)議是不支持?jǐn)帱c的,HTTP/1.1開始就支持了。一般斷點下載時才用到Range和Content-Range實體頭。HTTP協(xié)議本身不支持?jǐn)帱c上傳,需要自己實現(xiàn)。
二、Range?
用于請求頭中,指定第一個字節(jié)的位置和最后一個字節(jié)的位置,一般格式:
Range:bytes=[first byte pos]-[last byte pos]?
1.以下幾點需要注意: (1)這個數(shù)據(jù)區(qū)間是個閉合區(qū)間,起始值是0,所以“Range: bytes=0-1”這樣一個請求實際上是在請求開頭的2個字節(jié)。 (2)“Range: bytes=-200”,它不是表示請求文件開始位置的201個字節(jié),而是表示要請求文件結(jié)尾處的200個字節(jié)。 (3)如果last byte pos小于first byte pos,那么這個Range請求就是無效請求,server需要忽略這個Range請求,然后回應(yīng)一個200,把整個文件發(fā)給client。 (4)如果last byte pos大于等于文件長度,那么這個Range請求被認(rèn)為是不能滿足的,server需要回應(yīng)一個416,Requested range not satisfiable。
2.示例解釋: 表示頭500個字節(jié):bytes=0-499 ? 表示第二個500字節(jié):bytes=500-999 ? 表示最后500個字節(jié):bytes=-500 ? 表示500字節(jié)以后的范圍:bytes=500- ? 第一個和最后一個字節(jié):bytes=0-0,-1 ? 同時指定幾個范圍:bytes=500-600,601-999?
三、Content-Range
用于響應(yīng)頭,指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在服務(wù)器向客戶返回一個部分響應(yīng),它必須描述響應(yīng)覆蓋的范圍和整個實體長度。一般格式:?
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- 或不用這個頭
一般正常回應(yīng)?
HTTP/1.1 200 OK? Content-Length: 801 ? ? ? Content-Type: application/octet-stream? Content-Range: bytes 0-800/801 //801:文件總大小
部分內(nèi)容轉(zhuǎn)載自:http://www.liqwei.com/network/protocol/2011/886.shtml
所謂斷點續(xù)傳,其實只是指下載,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。在以前版本的HTTP協(xié)議是不支持?jǐn)帱c的,HTTP/1.1開始就支持了。一般斷點下載時才用到Range和Content-Range實體頭。HTTP協(xié)議本身不支持?jǐn)帱c上傳,需要自己實現(xiàn)。
二、Range?
用于請求頭中,指定第一個字節(jié)的位置和最后一個字節(jié)的位置,一般格式:
Range:bytes=[first byte pos]-[last byte pos]?
1.以下幾點需要注意: (1)這個數(shù)據(jù)區(qū)間是個閉合區(qū)間,起始值是0,所以“Range: bytes=0-1”這樣一個請求實際上是在請求開頭的2個字節(jié)。 (2)“Range: bytes=-200”,它不是表示請求文件開始位置的201個字節(jié),而是表示要請求文件結(jié)尾處的200個字節(jié)。 (3)如果last byte pos小于first byte pos,那么這個Range請求就是無效請求,server需要忽略這個Range請求,然后回應(yīng)一個200,把整個文件發(fā)給client。 (4)如果last byte pos大于等于文件長度,那么這個Range請求被認(rèn)為是不能滿足的,server需要回應(yīng)一個416,Requested range not satisfiable。
2.示例解釋: 表示頭500個字節(jié):bytes=0-499 ? 表示第二個500字節(jié):bytes=500-999 ? 表示最后500個字節(jié):bytes=-500 ? 表示500字節(jié)以后的范圍:bytes=500- ? 第一個和最后一個字節(jié):bytes=0-0,-1 ? 同時指定幾個范圍:bytes=500-600,601-999?
三、Content-Range
用于響應(yīng)頭,指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在服務(wù)器向客戶返回一個部分響應(yīng),它必須描述響應(yīng)覆蓋的范圍和整個實體長度。一般格式:?
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- 或不用這個頭
一般正常回應(yīng)?
HTTP/1.1 200 OK? Content-Length: 801 ? ? ? Content-Type: application/octet-stream? Content-Range: bytes 0-800/801 //801:文件總大小
部分內(nèi)容轉(zhuǎn)載自:http://www.liqwei.com/network/protocol/2011/886.shtml
總結(jié)
- 上一篇: linux下如何启动vsftp服务,如何
- 下一篇: 服务器任务栏不显示程序,Win10任务栏