author:finalbsd
date:2008-07-08
之前講etag的時候都只是對斷點續傳做了最簡單的說明,沒有深入研究。今天研究了一會,希望可以回答laurence的問題,呵呵:)
1.斷點續傳概念
斷點續傳的理解可以分為兩部分:一部分是斷點,一部分是續傳。
2.http/1.1和斷點續傳
http1.1的描述中有幾個東西可以支援斷點續傳
if-range的使用格式為:if-range: etag|http-date
也就是說if-range後面可以使用etag或者last-modified返回的值:
if-range: "df6b0-b4a-3be1b5e1"
if-range: tue, 8 jul 2008 05:05:56 gmt
邏輯上來講,上面2種方式分別和if-match,if-unmodified-since的工作原理一樣,他們的值正是伺服器返回的etag和last-modified值。
2.2 range
range是另外乙個request header,也就是由客戶端發給伺服器的,如果沒有傳送,客戶端傳送的if-range會被忽略。同樣,如果伺服器端根本不支援斷點續傳,if-range也一樣被忽略。總之,離開了range,if-range的存在沒有任何意義。
2.3 accept-ranges
accept-ranges是乙個響應頭,伺服器傳送這個頭來告訴客戶端它支援range(範圍)請求,後面的值,可以是bytes那麼客戶端發回來的:ranges: bytes=2400- 就表示請求2400位元組到檔案末尾的這些資料。
2.4 content-range
這是乙個響應頭,說明了伺服器提供的內容的位元組範圍和整個資源的長度。
引用:(感謝i_amok
深入了解http協議
誠實地說,我從來都沒有找到使用這種特性軟體片斷。但是我拒絕在**宣告中寫入"他並不是完全的http相容的"。略去這個特性必定會觸犯墨菲法則(murphy's law)。無論如何,多部分範圍還是被用於電子郵件傳輸中,把頭資訊、普通文字和附件分開。
4.php的實現(這部分來自:
)
/*** 傳送檔案
HTTP 斷點續傳
客戶端請求域 range 格式如下例子 第乙個500位元組 位元組偏移量0 499,包括0和499 range bytes 0 499 第二個500位元組 位元組偏移量500 999,包括500和999 range bytes 500 999 最後500位元組 位元組偏移量9500 9999,包括9...
IOS斷點續傳
asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...
linux斷點續傳
在linux伺服器上經常要用scp傳輸大檔案,可能由於網路等原因出現間接性中斷,導致傳輸一半的檔案突然中斷。其實scp是可以續傳的,它需要rsync以及它的ssh協議 舉例如下 rsync p rsh ssh home.tar 192.168.205.34 home home.tar,再輸出密碼後,...