HTTP断点续传下载的原理

简介:

frombegintoend原文HTTP断点续传下载的原理

要实现断点续传下载文件,首先要了解断点续传的原理。断点续传其实就是在上一次下载断开的位置开始继续下载,HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。

这是一个普通的下载请求:

1
2
3
4
5
6
7
8
GET /test.txt HTTP/1.1 
Accept:*/* 
Referer:http: //192.168.1.96 
Accept-Language:zh-cn 
Accept-Encoding:gzip,deflate 
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727) 
Host:192.168.1.96 
Connection:Keep-Alive 

 这表示从1024字节开始断点续传(加入了Range:bytes=1024-):

1
2
3
4
5
6
7
8
9
GET /test.txt HTTP/1.1 
Accept:*/* 
Referer:http: //192.168.1.96 
Accept-Language:zh-cn 
Accept-Encoding:gzip,deflate 
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727) 
Host:192.168.1.96 
Range:bytes=1024- 
Connection:Keep-Alive 

 C#主要代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#region 以断点续传方式下载文件 
   
/// <summary> 
/// 以断点续传方式下载文件 
/// </summary> 
/// <param name="strFileName">下载文件的保存路径</param> 
/// <param name="strUrl">文件下载地址</param> 
public  void  DownloadFile( string  strFileName,  string  strUrl) 
     //打开上次下载的文件或新建文件 
     long  SPosition = 0; 
     FileStream FStream; 
     if  (File.Exists(strFileName)) 
    
         FStream = File.OpenWrite(strFileName); 
         SPosition = FStream.Length; 
         FStream.Seek(SPosition, SeekOrigin.Current); //移动文件流中的当前指针 
    
     else 
    
         FStream =  new  FileStream(strFileName, FileMode.Create); 
         SPosition = 0; 
    
     try 
    
         HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strUrl); 
         if  (SPosition > 0) 
             myRequest.AddRange(( int )SPosition); //设置Range值 
         //向服务器请求,获得服务器的回应数据流 
         Stream myStream = myRequest.GetResponse().GetResponseStream(); 
         byte [] btContent =  new  byte [512]; 
         int  intSize = 0; 
         intSize = myStream.Read(btContent, 0, 512); 
         while  (intSize > 0) 
        
             FStream.Write(btContent, 0, intSize); 
             intSize = myStream.Read(btContent, 0, 512); 
        
         FStream.Close(); 
         myStream.Close(); 
         //文件下载完成 
    
     catch 
    
         FStream.Close(); 
    
  
#endregion 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。

   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6147157.html ,如需转载请自行联系原作者

相关文章
|
8月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
4月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
234 18
|
4月前
|
Web App开发 网络协议 应用服务中间件
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
HTTP/2 是 HTTP/1.1 的重要升级,通过多路复用、头部压缩、服务器推送等特性显著提升性能与效率。本文详细解析了 HTTP/2 的优势、配置方法及实际应用,涵盖 Nginx/Apache/IIS 配置、curl 测试工具使用,并对比 HTTP/1.1 指出其优化点。同时提醒需注意 HTTPS 支持、客户端兼容性等问题,助你高效掌握并运用 HTTP/2 技术。
505 5
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
|
3月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
238 0
|
4月前
|
存储 缓存 前端开发
http协议调试代理工具,Fiddler免费版下载,抓包工具使用教程
Fiddler是一款功能强大的HTTP协议调试代理工具,能记录并检查电脑与互联网间的HTTP通信,支持断点设置和数据编辑。相比其他网络调试器,Fiddler操作更简单且用户友好,支持查看Cookie、HTML、JS、CSS等文件内容。它还具备HTTPS抓包、过滤设置、统计页面总重量等功能,适用于安全测试与功能测试。通过插件扩展,用户可自定义视图或分析缓存行为。支持多种HTTP请求方法(如GET、POST等)及状态码分类(1xx-5xx),是开发者调试网络请求的得力工具。同类工具有HttpWatch、Firebug、Wireshark等。
450 1
|
11月前
|
安全 算法 网络安全
HTTPS原理
HTTPS 通过加密、数字证书、握手过程等多种手段,确保了网络通信的安全和可靠。它为用户提供了更高级别的隐私保护和数据安全,是现代互联网中重要的安全保障机制。随着网络安全威胁的不断增加,HTTPS 的应用也越来越广泛,成为保障网络安全的重要基石。
633 70
|
10月前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
10月前
【网路原理】——HTTP状态码和Postman使用
状态码(200,404,403,405,500,504,302),Postman下载和使用构造请求
|
10月前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
10月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密