斷點續傳的原理
假設伺服器網域名稱為wwww.sjtu.edu.cn,檔名為down.zip。
仔細看一下就會發現多了一行range: bytes=2000070-;這一行的意思就是告訴伺服器down.zip這個檔案從2000070位元組開始傳,前面的位元組不用傳了。
伺服器收到這個請求以後,返回的資訊如下:
content-length=106786028
content-range=bytes 2000070-106786027/106786028
date=mon, 30 apr 2001 12:55:20 gmt
etag=w/"02ca57e173c11:95b"
server=microsoft-iis/5.0
last-modified=mon, 30 apr 2001 12:55:20 gmt
和前面伺服器返回的資訊比較一下,就會發現增加了一行:
content-range=bytes 2000070-106786027/106786028
返回的**也改為206了,而不再是200了。
知道了以上原理,就可以進行斷點續傳的程式設計了。
http標頭檔案 status code
表示頭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請求,如果一切正常,伺服器的響應報文會有下面這行:
表示處理請求成功,響應報文還有這一行
content-range: bytes 200-299/403
斜槓後面的403表示檔案的大小,通常content-range的用法為:
. the first 500 bytes:
content-range: b
ytes 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斷點續傳
在http協議中,獲取資源可以使用get方法,但在使用get方法指定乙個資源後,會獲取到該資源的所有位元組。在http協議中,提供range屬性,可以指定獲取資源某一段資料。如使用telnet連線www.cz88.net 的80埠 會獲取如下資料 ht失去了跟主機的連線。在獲取的報文中,可以看到co...
ASIHTTPRequest實現斷點續傳
asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...
ios實現斷點續傳
asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...