一般狀況下,Web服務器(如Apache)會默認開啓對斷點續傳的支持。所以,若是直接經過Web服務器來提供文件的下載,能夠沒必要作特別的配置,便可享受到斷點續傳的好處。斷點續傳是在發起HTTP請求的時候加入RANGE頭來告訴服務器客戶端已經下載了多少字節。等全部這些請求都返回以後,再把獲得的內容一塊一塊的拼接起來獲得完整的資源。php
你能夠經過如下的命令來測試一下。apache
localhost [~]# wget -S http://httpd.apache.org/images/httpd_logo_wide_new.png 2>&1 | grep ‘Accept-Ranges’
Accept-Ranges: bytes服務器
輸出結果 Accept-Ranges: bytes ,說明服務器支持按字節下載。app
curl –range 0-99 http://images.apple.com/home/images/billboard_iphone_hero.jpgcurl
這樣能夠到最開始99字節,結果以下圖:iphone
說明從服務器端按字節範圍下載是徹底沒有問題的。ide
如今咱們嘗試如下方式:函數
一、一次性下載整個圖片。測試
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 –:–:– –:–:– –:—:— 527kurl
完成後,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: "的值