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 ,如需转载请自行联系原作者

相关文章
|
2月前
|
算法 网络协议 安全
HTTP 原理和面试题
HTTP 原理和面试题
|
23天前
|
安全 网络安全 数据安全/隐私保护
深入理解HTTP协议:工作原理与安全性
【6月更文挑战第28天】HTTP是互联网基础协议,用于浏览器与服务器通信。基于请求-响应模型,无状态且可扩展。但其明文传输、缺乏身份验证和数据完整性校验导致安全问题。HTTPS 加入SSL/TLS,提供加密、身份验证和完整性校验,保障网络安全。了解HTTP原理和安全至关重要。
|
24天前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
25 2
|
13天前
|
网络协议 Python
Python实现HTTP 传输的断点续传机制
使用Python `requests`库实现HTTP断点续传下载大文件,通过设置`Range`头部从上次中断的位置开始继续下载。示例代码展示了一个名为`resume_download`的函数,它接收URL、文件名和最后字节位置参数,以追加方式打开文件并逐块写入内容。要启用HTTP长连接,可添加`Connection: keep-alive`到请求头。
|
17天前
|
人工智能
AI绘画,Stable Diffusion如何使用中文简体包,黑色页面切换参数http://127.0.0.1:7860/?__theme=dark 两个__,中文包下载和安装
AI绘画,Stable Diffusion如何使用中文简体包,黑色页面切换参数http://127.0.0.1:7860/?__theme=dark 两个__,中文包下载和安装
|
1月前
|
移动开发 Java
Java Socket编程 - 基于Socket实现HTTP下载客户端
Java Socket编程 - 基于Socket实现HTTP下载客户端
21 1
|
1月前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
20 1
|
1月前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
29 1
|
2月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
1月前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
14 0