FTP和HTTP斷點續傳原理

第一,最重要的一點,斷點續傳需要服務器的支持,這個是必要條件。
傳統的FTP SERVER是不支持斷點續傳的,因爲它不支持REST指令,傳統的FTP指令(我是指服務器端指令)並不包括REST指令。

第二,客戶端要知道使用REST等一系列指令來作斷點續傳。

看看斷點續傳的詳細過程(FTP SERVER):
首先客戶端使用REST指令來告訴FTP SERVER它需要從文件的某個點開始傳,接着用STOR或者RETR命令開始傳文件,大概的命令的流程如下:

TYPE I
200 Type set to I.
PASV
227 Entering Passive Mode (204,48,18,69,98,250)
REST 187392
350 Restarting at 187392. Send STORE or RETRIEVE to initiate transfer.
RETR /pub/audio/pci/maestro-3/win2k/1056.zip
150 Opening BINARY mode data connection for /pub/audio/pci/maestro-3/win2k/1056.zip (936098 bytes).

首先使用TYPE命令告訴FTP SERVER使用BINARY模式傳送文件;
然後使用PASV命令告訴FTP SERVER使用被動打開模式來傳送文件;
接着使用REST 187392指令告訴FTP SERVER要從文件的187392字節開始傳送;
最後使用RETR指令來傳送文件。

從上面可以看出,這個FTP SERVER支持REST指令,有的FTP SERVER(特別的老的)是不支持這個指令的,這時即使FTP CLIENT支持斷點續傳也一點用都沒有!

支持斷點的FTP SERVER:Serv-U FTP,還有一系列的新出現的FTP SERVER;
不支持斷點的:IIS4以前版本所帶的都不行,IIS5 有,不家可以測試一下,登錄進FTP SERVER,然後輸入REST 1000命令,看服務器是否認識,認識就是支持斷點。


上面說的是FTP SERVER的斷點,HTTP的斷點續傳是這樣的:
在以前版本的HTTP SERVER也是不支持斷點的,HTTP/1.1開始就支持了,具體如下:

在HTTP請求的頭部信息裏面,通常是這樣的:

GET http://xxx.xxx.xxx.xxx/index.html HTTP/1.1
Host:www.163.net
Accept:*/*

上面是HTTP請求頭的主要內容,是瀏覽器等客戶端發給HTTP SERVER的信息。
在這個請求頭裏面,第一行叫做Request Line,GET叫做請求方法(通常得到一個HTML頁面都是用GET,CGI等請求是用POST),http://bbs.netbuddy.org/index.html是URL,HTTP/1.1爲版本號。
Host:bbs.netbuddy.org是HTTP服務器名字,這也是HTTP/1.1的新東東,以前做虛擬主機可是要一個主機名對應多個IP,現在好了......呵呵,這個離題太遠,不說了)

要做斷點續傳,瀏覽器等客戶端需要在請求頭裏面發送
Range: bytes=1140736-
這樣的請求,就是告訴HTTP SERVER,這個文件要從1140736字節開始傳送。


最後一點,大家看了上面的描述可能會有一個問題,那麼多點傳送怎麼做呢?那就是多起幾個線程,連接到服務器,用斷點指令來傳送文件,在傳送的過程中,會檢查前面的(比如說第一個螞蟻)得到的文件的部分是否超過了後面的(比如說第二個螞蟻)的起點,相等就停前面的螞蟻,最後再合併幾個部分,就得到一個完整的文件了

發佈了25 篇原創文章 · 獲贊 6 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章