断点续传的原理
其实断点续传的原理很简单
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为w www.sjtu.edu.cn<wbr style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">,文件名为down.zip。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">GET /down.zip HTTP/1.1</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">excel, application/msword, application/vnd.ms-powerpoint, */*</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept-Language: zh-cn</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept-Encoding: gzip, deflate</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Connection: Keep-Alive</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">200</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Length=106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept-Ranges=bytes</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Date=Mon, 30 Apr 2001 12:56:11 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">ETag=W/"02ca57e173c11:95b"</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Type=application/octet-stream</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Server=Microsoft-IIS/5.0</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Web服务器的时候要多加一条信息--从哪里开始。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">GET /down.zip HTTP/1.0</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">User-Agent: NetFox</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">RANGE: bytes=2000070-</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">仔细看一下就会发现多了一行RANGE: bytes=2000070-</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">服务器收到这个请求以后,返回的信息如下:</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">206</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Length=106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Range=bytes 2000070-106786027/106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Date=Mon, 30 Apr 2001 12:55:20 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">ETag=W/"02ca57e173c11:95b"</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Type=application/octet-stream</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Server=Microsoft-IIS/5.0</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">和前面服务器返回的信息比较一下,就会发现增加了一行:</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Range=bytes 2000070-106786027/106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">返回的代码也改为206了,而不再是200了。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">知道了以上原理,就可以进行断点续传的编程了。</span> </wbr>
其实断点续传的原理很简单
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为w www.sjtu.edu.cn<wbr style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">,文件名为down.zip。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">GET /down.zip HTTP/1.1</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">excel, application/msword, application/vnd.ms-powerpoint, */*</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept-Language: zh-cn</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept-Encoding: gzip, deflate</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Connection: Keep-Alive</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">200</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Length=106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept-Ranges=bytes</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Date=Mon, 30 Apr 2001 12:56:11 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">ETag=W/"02ca57e173c11:95b"</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Type=application/octet-stream</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Server=Microsoft-IIS/5.0</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Web服务器的时候要多加一条信息--从哪里开始。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">GET /down.zip HTTP/1.0</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">User-Agent: NetFox</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">RANGE: bytes=2000070-</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">仔细看一下就会发现多了一行RANGE: bytes=2000070-</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">服务器收到这个请求以后,返回的信息如下:</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">206</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Length=106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Range=bytes 2000070-106786027/106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Date=Mon, 30 Apr 2001 12:55:20 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">ETag=W/"02ca57e173c11:95b"</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Type=application/octet-stream</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Server=Microsoft-IIS/5.0</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">和前面服务器返回的信息比较一下,就会发现增加了一行:</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">Content-Range=bytes 2000070-106786027/106786028</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">返回的代码也改为206了,而不再是200了。</span><br style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left"><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px; text-align:left">知道了以上原理,就可以进行断点续传的编程了。</span> </wbr>