斷點續傳的用途在 linux/unix 系統下,常用支援斷點續傳的 ftp 客戶端軟體是lftp
。
1 http1.1 之後支援端點續傳
(1) range & content-range
2)響應頭
content-range
:用於指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在伺服器向客戶返回乙個部分響應,它必須描述響應覆蓋的範圍和整個實體長度。例如,傳送頭500個位元組次字段的形式:content-range:bytes0- 499/1234
。
(2)大體流程概述:
2)網路中斷,客戶端請求續傳,因此需要在http頭中申明本次需要續傳的片段:
range:bytes=
512000
-
3)服務端收到斷點續傳請求,從檔案的512k位置開始傳輸,並且在http頭中增加:
content-range:bytes 512000-/
1024000
並且此時服務端返回的http狀態碼應該是206,而不是200。
206 partial content:
客戶端發起了範圍請求,伺服器處理成功,返回了由content-range指定範圍的實體內容。
2 防止續傳出錯
但是在實際場景中,會出現一種情況,即在終端發起續傳請求時,url對應的檔案內容在服務端已經發生變化,此時續傳的資料肯定是錯誤的。如何解決這個問題了?顯然此時我們需要有乙個標識檔案唯一性的方法。在rfc2616中也有相應的定義,比如實現last-modified
來標識檔案的最後修改時間,這樣即可判斷出續傳檔案時是否已經發生過改動。同時rfc2616中還定義有乙個etag
的頭,可以使用etag頭來放置檔案的唯一標識,比如檔案的md5值。
(1)響應頭:
etag/last-modified作為標記,主要用來驗證檔案內容是否修改。
etag
:就是乙個物件(比如url)的標誌值,就乙個物件而言,比如乙個html檔案,如果被修改了,其etag也會別修改,所以,etag的作用跟last-modified的作用差不多,主要供web伺服器判斷乙個物件是否改變了。比如前一次請求某個html檔案時,獲得了其 etag,當這次又請求這個檔案時,瀏覽器就會把先前獲得etag值傳送給web伺服器,然後web伺服器會把這個etag跟該檔案的當前etag進行對比,然後就知道這個檔案有沒有改變了。
last-modified
:web伺服器認為物件的最後修改時間,比如檔案的最後修改時間,動態頁面的最後產生時間等等。例如:last-modified:tue, 06 may 2008 02:42:43 gmt
(2)請求頭:
終端在發起續傳請求時應該在http頭中申明if-match
或者if-modified-since
字段,幫助服務端判別檔案變化。
if-modifiedsince
: 如果在if-modifiedsince欄位指定的日期後,資源發生了更新,伺服器會接受請求。如果沒有更新,即本地cache和伺服器資源相同,伺服器會傳送乙個304 not modified響應,告知本地的cache頁面是最新的。
注意;
在傳送http請求時,if-modified-since
會把瀏覽器端快取頁面的最後修改時間一起發到伺服器去,伺服器會把這個時間與伺服器上實際檔案的最後修改時間進行比較。
if-match
:如果物件的 etag 沒有改變,其實也就意味著物件沒有改變,才執行請求的動作,獲取文件。
另外rfc2616中同時定義有乙個if-range
頭,終端如果在續傳是使用if-range
。if-range
中的內容可以為最初收到的etag頭或者是last-modfied中的最後修改時間。服務端在收到續傳請求時,通過if-range中的內容進行校驗,校驗一致時返回206的續傳回應,不一致時服務端則返回200回應,回應的內容為新的檔案的全部資料。
if-range
: 瀏覽器告訴 web 伺服器,如果我請求的物件沒有改變,就把我缺少的部分給我,並返回206狀態碼,如果物件改變了,就把整個物件給我,並返回200。瀏覽器通過傳送請求物件的etag 或者自己所知道的最後修改時間給 web 伺服器,讓其判斷物件是否改變了。總是跟 range 頭部一起使用。
HTTP斷點續傳(分塊傳輸)
檢測伺服器是否支援斷點續傳 在 linux unix 系統下,常用支援斷點續傳的 ftp 客戶端軟體是 lftp。range 用於請求頭中,指定第乙個位元組的位置和最後乙個位元組的位置,一般格式 range unit first byte pos last byte pos range 頭部的格式有...
HTTP斷點續傳(分塊傳輸)
檢測伺服器是否支援斷點續傳 在 linux unix 系統下,常用支援斷點續傳的 ftp 客戶端軟體是 lftp。range 用於請求頭中,指定第乙個位元組的位置和最後乙個位元組的位置,一般格式 range unit first byte pos last byte pos range 頭部的格式有...
HTTP 斷點續傳(分塊傳輸)
在 linux unix 系統下,常用支援斷點續傳的 ftp 客戶端軟體是 lftp。range 用於請求頭中,指定第乙個位元組的位置和最後乙個位元組的位置,一般格式 range unit first byte pos last byte pos range 頭部的格式有以下幾種情況 range b...