HTTP斷點續傳原理

2021-10-04 14:20:33 字數 2794 閱讀 6259

作為一名程式媛我也想快點進步,希望慢慢積累吧。給自己加加油。

1. 斷點續傳的必要性

2.了解斷點續傳之前,了解下http協議。

http(hyper text transfer protocol)協議是用於從全球資訊網(www)伺服器傳輸超文字到本地瀏覽器的傳送協議。它是基於tcp/ip協議來傳遞資料的。

http請求由三部分組成:狀態行、請求頭、請求體。

先看一下客戶端請求頭的乙個例子:

cache-control: max-age=0這裡不詳細展開,我們只討論和斷點續傳有關的幾個請求頭屬性。

1.range: 只請求實體的一部分。比如:range:bytes:500-900

2.etag:請求實體的唯一識別符號。(可以是檔案md5) 比如:etag: 「737060cd8c284d8af7ad3082f209582d」

3.last-modified:最後資源的更改時間。用於伺服器響應頭 。如:last-modified: tue, 15 nov 2010 12:45:26 gmt

4.if-range:如果實體未改變,伺服器傳送客戶端丟失的部分,否則傳送整個實體。引數也為etag。 例子:if-range: 「737060cd8c284d8af7ad3082f209582d」

5.content-range:用於伺服器響應頭。記錄伺服器返回資料的範圍及檔案總大小。如:content-range: bytes 0-499/22400

6.if-modified-since:如果請求的部分在指定時間之後被修改則請求成功,未被修改則返回304**。 如:

if-modified-since: sat, 29 oct 2010 19:43:31 gmt
有的同學可能分不清楚是客戶端的請求頭還是伺服器端的響應頭,?下面理一下:

1、客戶端第一次請求需要帶上請求頭range: bytes=0-,如果不帶預設也是表示第一次請求完整檔案。

2、伺服器b響應頭可能包含如下屬性:

etag: 「737060cd8c284d8af7ad3082f209582d」 由伺服器端生產表示目前伺服器返回了0到499bytes的資料,檔案大小是22400bytes。並告訴客戶端a這個檔案的最後更改日期是tue, 15 nov 2010 12:45:26 gmt,它的唯一識別符號是「737060cd8c284d8af7ad3082f209582d」,可能是檔案的md5值,也可能是其他識別符號,由伺服器端來定。

有的同學可能會問,我們有last-modified就夠了,能判斷檔案是否修改了,還要etag幹嘛呢?如果伺服器b的檔案修改很頻繁,可能是毫秒級別的,那這個last-modified就起不了作用了,所以etag應運而生。

if-range: etag | http-date
它可以填寫etag值或者last-modified 的值。

if-range: 「737060cd8c284d8af7ad3082f209582d」 

if-range: tue,

15 nov 201012:

45:26 gmt

比如我們用:

if-range: 「737060cd8c284d8af7ad3082f209582d」 

range: bytes=20000- 表示我們這次請求是從第20001個bytes的位置到檔案結束部分的內容。

其中要知道if-rangerange是配套使用的,如果沒有range,那麼if-range也沒有意義。如果只有range,那麼返回的資料就是range中指定的位置,至於資料是否正確就不保證了。

if-range相當於條件,如果條件成立,也就是if-range裡的etag和伺服器b端檔案的etag一致,伺服器b就會返回狀態碼是206 partial的響應,和指定位置的響應資料。如果不滿足條件,也就是檔案發生了變動,那就返回狀態碼200 ok的響應,同時返回檔案起始位置的資料。返回此時檔案的etag或者last-modified

http斷點續傳原理

這周完成了乙個斷點續傳的功能。我們的遊戲裡載入地圖的邏輯簡化而言是這樣 1.首先用本地的md5檔案校驗地 件 很多檔案 是否完整。中間有很多步驟,任何步驟失敗都認為地圖不完整 2.如果完整,直接載入地圖。3.如果不完整,需要通過乙個http協議請求後台伺服器傳回完整的地圖。要解決這個問題,要了解以下...

HTTP的斷點續傳原理

accept ranges 由server傳送給client時需要的關鍵字。表明是否支援斷點續傳。accept ranges none 表示不支援斷點續傳 accept ranges bytes 表示支援以bytes為單位進行傳輸 content ranges 由server傳送給client時需要...

HTTP 斷點續傳

客戶端請求域 range 格式如下例子 第乙個500位元組 位元組偏移量0 499,包括0和499 range bytes 0 499 第二個500位元組 位元組偏移量500 999,包括500和999 range bytes 500 999 最後500位元組 位元組偏移量9500 9999,包括9...