通常情況下,Web服務器(如Apache)會默認開啟對斷點續傳的支持。因此,如果直接通過Web服務器來提供文件的下載,可以不必做特別的配置,即可享受到斷點續傳的好處。斷點續傳是在發起HTTP請求的時候加入RANGE頭來告訴服務器客戶端已經下載了多少字節。等所有這些請求都返回之后,再把得到的內容一塊一塊的拼接起來得到完整的資源。
你可以通過以下的命令來測試一下。
Linux 測試服務器是否支持斷點續傳
localhost [~]# wget -S http://httpd.apache.org/images/httpd_logo_wide_new.png 2>&1 | grep ‘Accept-Ranges’
Accept-Ranges: bytes
輸出結果 Accept-Ranges: bytes ,說明服務器支持按字節下載。
curl 命令發送字節范圍下載
curl –range 0-99 http://images.apple.com/home/images/billboard_iphone_hero.jpg
這樣可以到最開始99字節,結果如下圖:
說明從服務器端按字節范圍下載是完全沒有問題的。
現在我們嘗試以下方式:
1、一次性下載整個圖片。
localhost [~]# curl –range 0-98315 http://images.apple.com/home/images/billboard_iphone_hero.jpg > test.jpg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 98316 100 98316 0 0 524k 0 –:–:– –:–:– –:—:— 527k
完成后,test.jpg完全等於billboard_iphone_hero.jpg,文件大小為98,316 字節。
注意:字節是從0開始,結束字節為總字節長度 減 1。
判斷是否支持斷點續傳,其實是判斷是否支持文件指針移動。在FTP中用REST 100測試,在HTTP中用CInternetFile的Seek函數測試,如果成功則支持斷點續傳。
ftp:
send command:
"REST 1\r\n"
回復"350 Restarting at 1. Send STORE or RETRIEVE to initiate transfer."則支持
HTTP:
在HTTP header里面加上 "RANGE: bytes=13750-\r\n"
然后檢查返回頭的"Content-Range: "的值