日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

斷點續傳原理

 

簡述

斷點續傳:指的是在上傳/下載時,將任務(一個文件或壓縮包)人為的劃分為幾個部分,每一個部分采用一個線程進行上傳/下載,如果碰到網絡故障,可以從已經上傳/下載的部分開始繼續上傳/下載未完成的部分,而沒有必要從頭開始上傳/下載??梢怨澥r間,提高速度。

斷點續傳的用途

有時用戶上傳/下載文件需要歷時數小時,萬一線路中斷,不具備斷點續傳的 HTTP/FTP 服務器或下載軟件就只能從頭重傳,比較好的 HTTP/FTP 服務器或下載軟件具有斷點續傳能力,允許用戶從上傳/下載斷線的地方繼續傳送,這樣大大減少了用戶的煩惱。

常見的支持斷點續傳的上傳/下載軟件:QQ 旋風、迅雷、快車、電驢、酷6、土豆、優酷、百度視頻、新浪視頻、騰訊視頻、百度云等。

在 linux/Unix 系統下,常用支持斷點續傳的 FTP 客戶端軟件是 lftp。

Range & Content-Range

HTTP1.1 協議(RFC2616)開始支持獲取文件的部分內容,這為并行下載以及斷點續傳提供了技術支持。它通過在 Header 里兩個參數實現的,客戶端發請求時對應的是 Range ,服務器端響應時對應的是 Content-Range。

Range

用于請求頭中,指定第一個字節的位置和最后一個字節的位置,一般格式:

Range:(unit=first byte pos)-[last byte pos]

Range 頭部的格式有以下幾種情況:

Range: bytes=0-499 表示第 0-499 字節范圍的內容
Range: bytes=500-999 表示第 500-999 字節范圍的內容
Range: bytes=-500 表示最后 500 字節的內容
Range: bytes=500- 表示從第 500 字節開始到文件結束部分的內容
Range: bytes=0-0,-1 表示第一個和最后一個字節
Range: bytes=500-600,601-999 同時指定幾個范圍

Content-Range

用于響應頭中,在發出帶 Range 的請求后,服務器會在 Content-Range 頭部返回當前接受的范圍和文件總大小。一般格式:

Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]

例如:

Content-Range: bytes 0-499/22400

0-499 是指當前發送的數據的范圍,而 22400 則是文件的總大小。

而在響應完成后,返回的響應頭內容也不同:

HTTP/1.1 200 Ok(不使用斷點續傳方式)

HTTP/1.1 206 Partial Content(使用斷點續傳方式)

增強校驗

在實際場景中,會出現一種情況,即在終端發起續傳請求時,URL 對應的文件內容在服務器端已經發生變化,此時續傳的數據肯定是錯誤的。如何解決這個問題了?顯然此時需要有一個標識文件唯一性的方法。

在 RFC2616 中也有相應的定義,比如實現 Last-Modified 來標識文件的最后修改時間,這樣即可判斷出續傳文件時是否已經發生過改動。同時 FC2616 中還定義有一個 ETag 的頭,可以使用 ETag 頭來放置文件的唯一標識。

Last-Modified

If-Modified-Since,和 Last-Modified 一樣都是用于記錄頁面最后修改時間的 HTTP 頭信息,只是 Last-Modified 是由服務器往客戶端發送的 HTTP 頭,而 If-Modified-Since 則是由客戶端往服務器發送的頭,可以看到,再次請求本地存在的 cache 頁面時,客戶端會通過 If-Modified-Since 頭將先前服務器端發過來的 Last-Modified 最后修改時間戳發送回去,這是為了讓服務器端進行驗證,通過這個時間戳判斷客戶端的頁面是否是最新的,如果不是最新的,則返回新的內容,如果是最新的,則返回 304 告訴客戶端其本地 cache 的頁面是最新的,于是客戶端就可以直接從本地加載頁面了,這樣在網絡上傳輸的數據就會大大減少,同時也減輕了服務器的負擔。

Etag

Etag(Entity Tags)主要為了解決 Last-Modified 無法解決的一些問題。

一些文件也許會周期性的更改,但是內容并不改變(僅改變修改時間),這時候我們并不希望客戶端認為這個文件被修改了,而重新 GET。

某些文件修改非常頻繁,例如:在秒以下的時間內進行修改(1s 內修改了 N 次),If-Modified-Since 能檢查到的粒度是 s 級的,這種修改無法判斷(或者說 UNIX 記錄 MTIME 只能精確到秒)。

某些服務器不能精確的得到文件的最后修改時間。

為此,HTTP/1.1 引入了 Etag。Etag 僅僅是一個和文件相關的標記,可以是一個版本標記,例如:v1.0.0;或者說 “627-4d648041f6b80” 這么一串看起來很神秘的編碼。但是 HTTP/1.1 標準并沒有規定 Etag 的內容是什么或者說要怎么實現,唯一規定的是 Etag 需要放在 “” 內。

If-Range

用于判斷實體是否發生改變,如果實體未改變,服務器發送客戶端丟失的部分,否則發送整個實體。一般格式:

If-Range: Etag | HTTP-Date

也就是說,If-Range 可以使用 Etag 或者 Last-Modified 返回的值。當沒有 ETage 卻有 Last-modified 時,可以把 Last-modified 作為 If-Range 字段的值。

例如:

If-Range: “627-4d648041f6b80”

If-Range: Fri, 22 Feb 2013 03:45:02 GMT

If-Range 必須與 Range 配套使用。如果請求報文中沒有 Range,那么 If-Range 就會被忽略。如果服務器不支持 If-Range,那么 Range 也會被忽略。

如果請求報文中的 Etag 與服務器目標內容的 Etag 相等,即沒有發生變化,那么應答報文的狀態碼為 206。如果服務器目標內容發生了變化,那么應答報文的狀態碼為 200。

用于校驗的其他 HTTP 頭信息:If-Match/If-None-Match、If-Modified-Since/If-Unmodified-Since。

工作原理

Etag 由服務器端生成,客戶端通過 If-Range 條件判斷請求來驗證資源是否修改。請求一個文件的流程如下:

第一次請求:

客戶端發起 HTTP GET 請求一個文件。

服務器處理請求,返回文件內容以及相應的 Header,其中包括 Etag(例如:627-4d648041f6b80)(假設服務器支持 Etag 生成并已開啟了 Etag)狀態碼為 200。

第二次請求(斷點續傳):

客戶端發起 HTTP GET 請求一個文件,同時發送 If-Range(該頭的內容就是第一次請求時服務器返回的 Etag:627-4d648041f6b80)。

服務器判斷接收到的 Etag 和計算出來的 Etag 是否匹配,如果匹配,那么響應的狀態碼為 206;否則,狀態碼為 200。

檢測服務器是否支持斷點續傳

CURL 實現檢測:

[root@localhost ~]# curl -i --range 0-9 http://www.baidu.com/img/bdlogo.gif
HTTP/1.1 206 Partial Content
Date: Mon, 21 Nov 2016 05:26:29 GMT
Server: Apache
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie: BAIDUID=0CD0E23B4D4F739954DFEDB92BE6CE03:FG=1; expires=Tue, 21-Nov-17 05:26:29 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
Last-Modified: Fri, 22 Feb 2013 03:45:02 GMT
ETag: "627-4d648041f6b80"
Accept-Ranges: bytes
Content-Length: 10
Cache-Control: max-age=315360000
Expires: Thu, 19 Nov 2026 05:26:29 GMT
Content-Range: bytes 0-9/1575
Connection: Keep-Alive
Content-Type: image/gif
GIF89a[root@localhost ~]#

能夠找到 Content-Range,則表明服務器支持斷點續傳。有些服務器還會返回 Accept-Ranges,輸出結果 Accept-Ranges: bytes ,說明服務器支持按字節下載。

分享到:
標簽:斷點續傳
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定