﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-wenhl5656-文章分类-NetWorking</title><link>http://www.blogjava.net/wenhl5656/category/31890.html</link><description>长夜漫漫，与技术为伴</description><language>zh-cn</language><lastBuildDate>Sun, 01 Jun 2008 13:39:49 GMT</lastBuildDate><pubDate>Sun, 01 Jun 2008 13:39:49 GMT</pubDate><ttl>60</ttl><item><title>断点续传的原理</title><link>http://www.blogjava.net/wenhl5656/articles/205193.html</link><dc:creator>爱吃鱼头</dc:creator><author>爱吃鱼头</author><pubDate>Sun, 01 Jun 2008 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/wenhl5656/articles/205193.html</guid><wfw:comment>http://www.blogjava.net/wenhl5656/comments/205193.html</wfw:comment><comments>http://www.blogjava.net/wenhl5656/articles/205193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wenhl5656/comments/commentRss/205193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wenhl5656/services/trackbacks/205193.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实断点续传的原理很简单，就是在Http的请求上和一般的下载有所不同而已。打个比方，浏览器请求服务器上的一个文时，所发出的请求如下：<br />
<br />
&nbsp;&nbsp; 假设服务器域名为<a href="http://www.sjtu.edu.cn/">www.sjtu.edu.cn</a>，文件名为down.zip。<br />
<br />
GET /down.zip HTTP/1.1<br />
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, plication/vnd.ms-powerpoint, */*<br />
Accept-Language: zh-cn<br />
Accept-Encoding: gzip, deflate<br />
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)<br />
Connection: Keep-Alive<br />
<br />
服务器收到请求后，按要求寻找请求的文件，提取文件的信息，然后返回给浏览器，返回信息如下：<br />
<br />
200<br />
Content-Length=106786028<br />
Accept-Ranges=bytes<br />
Date=Mon, 30 Apr 2001 12:56:11 GMT<br />
ETag=W/"02ca57e173c11:95b"<br />
Content-Type=application/octet-stream<br />
Server=Microsoft-IIS/5.0<br />
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT<br />
<br />
所谓断点续传，也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给Web服务器的时候要多加一条信息——从哪里开始。<br />
<br />
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器，要求从2000070字节开始。<br />
<br />
GET /down.zip HTTP/1.0<br />
User-Agent: Firefox<br />
RANGE: bytes=2000070-<br />
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2<br />
<br />
仔细看一下就会发现多了一行RANGE: bytes=2000070-；这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传，前面的字节不用传了。<br />
服务器收到这个请求以后，返回的信息如下：<br />
<br />
206<br />
Content-Length=106786028<br />
Content-Range=bytes 2000070-106786027/106786028<br />
Date=Mon, 30 Apr 2001 12:55:20 GMT<br />
ETag=W/"02ca57e173c11:95b"<br />
Content-Type=application/octet-stream<br />
Server=Microsoft-IIS/5.0<br />
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT<br />
<br />
和前面服务器返回的信息比较一下，就会发现增加了一行：<br />
<br />
Content-Range=bytes 2000070-106786027/106786028<br />
<br />
返回的代码也改为206了，而不再是200了。<br />
知道了以上原理，就可以进行断点续传的编程了。<br />
 <img src ="http://www.blogjava.net/wenhl5656/aggbug/205193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wenhl5656/" target="_blank">爱吃鱼头</a> 2008-06-01 20:11 <a href="http://www.blogjava.net/wenhl5656/articles/205193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>