C#编程总结(十二)断点续传2014-03-20 cnblogs 停留的风我们经常使用下载工具,如bit精灵、迅雷、FlashGet,这些软件都支持断点续传。断点续传即下载任务暂停后可以继续,而无需重新下载,即下载时需要通知服务器的起始位置。如果 允许多线程进行分片下载,必须提供起始-截止位置。说到底就是可以选择下载某个片段,整个文件的字 节流,可以截取流的片段,也能实现流的累积,最终完成文件下载。一、原理在 HTTP/1.1里新增的一个头属性:Range,也是现在众多号称多线程下载工具(如 FlashGet、迅雷 等)实现多线程下载的核心所在。老版本的HTTP协议不支持,所以一些老的服务器还不支持断点续传。
Range(请求参数)用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:Range:(unit=first byte pos)-[last byte pos]例如:Range:100-199,取文件流的100至199之间的字节。Range:100,取位置为100后的所有字节。如果range 为正值,服务器应该开始发送从指定的 range 参 数到 HTTP 实体中数据的末尾之间的数据。Range:-99,取开始的100个字节。如果range 为负值,服务器应该开始发送从 HTTP 实体中数据的开 头到指定的 range 参数之间的数据。
Content-Range (响应参数)用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返 回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]
例如:Content-Range: bytes 1024000-1126399/7421120HTTP协议:http://www.w3.org/Protocols/rfc2616/rfc2616.html二、C#中实现在C#中使用AddRange方法向请求添加指定范围的字节范围标头
System.Net.HttpWebRequest
所有的方法: