HTTP 斷點續傳(分塊傳輸)

2021-10-08 11:28:06 字數 2251 閱讀 9582

斷點續傳的用途在 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-rangeif-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...