一般状况下,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: "的值