美文网首页
HTTP协议断点续传

HTTP协议断点续传

作者: 大成小栈 | 来源:发表于2021-04-21 20:02 被阅读0次

HTTP协议从V1.1开始可以使用长链接和断点续传和其他新特性,断点续传也就是从下载中断的分块,重新进行下载,直到下载的数据完整/可用。

1. Range相关字段

V1.1版本HTTP协议支持的这种断点续传,Header中4个字段必须要弄清楚,分别是Range、Content-Range、Accept-Ranges、Content-Length。

一般客户端发起请求,服务端来响应,Range就是请求的Header中所携字段(其为断点信息,需要服务端解析),三种格式如下:
Range : bytes=50- 意思是从第50个字节开始到最后一个字节
Range : bytes=50-100 意思是从第50字节到100字节
Range : bytes=-70 意思是最后的70个字节

一个正常Conten-type的HTTP请求,其响应状态码一般为200(OK,一切正常)。但上/下载的Conten-type有所区别,状态码也不同,一般为206、416等。206是Partial Content(服务器已经成功处理了部分内容),416是Requested Range Not Satisfiable(请求中的Range 请求头不合理)。

2. 下载流程

单线程下载流程: client发来请求 —> server返回200 —> client开始接受数据 —> user突发暂停下载 —> client突然停止接受数据 —> 然后client都没说再见就与server断开 —> user可能又按开始键 —> client再次与服务端连接上,并发送Header中带Range的请求给server —> server响应码206 —> 服务端从中断的数据块继续发送,并且会发送响应头:Content-Range给客户端 —> 客户端接收数据 —> 直到完成。

当然,下载一个分块文件,客户端也可以多线程并行进行(一般线程数不会超过5个),那么,服务端也相应地有多线程进行响应。想一想,这样的文件分块应该在什么层次进行?

3. HTTP断点续传示例

//// client发来请求
GET /123.zip HTTP/1.1 

//// server响应
HTTP/1.1 200 OK 

Accept-Ranges : bytes // 告知client,server支持断点传输的

Content-Length : 1900 // 文件总大小 

Content-Type : image/jpeg // 文件类型

····· // 二进制数据

若发送过程中,种种原因导致传输中断...
客户端又发来请求,如下:

//// 客户端发送请求
GET /123.zip HTTP/1.1 

Range:bytes=580- // 从580字节开始到1900字节,获取部分数据内容

//// 服务端响应
HTTP/1.1 206 Partial Content // 注意,是响应码是206

Accept-Ranges : bytes // 接收断点续传

Content-Type : image/jpeg // 文件类型

Content-Length : (1900 - 580) // 长度非总长度,为580-1900

Content-Range :bytes 580-(1900-1 ) / 1900 // 因为文件字节从0开始,结束字节要减1

····· // 二进制数据

因此,用存取断点续传文件时,在下载过程中:

  1. 一定要记录好resumeData,以便恢复中断的下载;
  2. 续存下载的数据时,对于本例,client一定要先seek文件的尾部进行追加;server一定要seek(580 byte),然后循环读取,读到结束字节=1900。
    重点来了。假设我们用Hava RandomAccessFile类读取。

参考文章:
https://zhuanlan.zhihu.com/p/43226601
https://blog.csdn.net/ye1992/article/details/49998511
https://blog.csdn.net/u013827143/article/details/86222486
https://www.cnblogs.com/lz2017/p/7146579.html
http://blog.sina.com.cn/s/blog_ec8c9eae0102x3uu.html

相关文章

  • ios 后台下载,断点续传总结

    断点续传 demo 断点续传的原理是在HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头的Ran...

  • 01要求技术点

    关于网络 1.你对 http 协议chunk 协议如何断点续传分片上传 ssl 握手? http://blog.c...

  • HTTP协议断点续传

    HTTP协议从V1.1开始可以使用长链接和断点续传和其他新特性,断点续传也就是从下载中断的分块,重新进行下载,直到...

  • HTTP断点续传原理: Range & Content-Rang

    所谓断点续传, 也就是要从文件已经下载的地方开始继续下载. 在以前版本的 HTTP 协议是不支持断点的, HTTP...

  • 断点续传or断电续传?!!

    所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1....

  • iOS 基于HTTP协议的断点续传

    > 原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务...

  • 断点上传

    一、断点上传辨义 在 Http 协议之下的 文件下载有“断点续传”功能,从服务器到客户端的文件下载可行,而对Htt...

  • 断点续传-http协议里Header参数Range

    原理 将文件数据按照请求要求,分成一段一段的下载。类似于我们常见的分页显示。断点续传的好处,防止大文件下载过程出现...

  • HTTP1.0和1.1的区别

    HTTP1.0HTTP1.1短连接长连接不支持断点续传支持断点续传添加了更多缓存控制策略添加了更多错误响应代码以I...

  • Range &Content-Range &Accept-Ran

    http协议从1.1开始支持获取文件的部分内容,这为并行下载以及断点续传提供了技术支持。 如对于一个多线程下载工具...

网友评论

      本文标题:HTTP协议断点续传

      本文链接:https://www.haomeiwen.com/subject/dbvzlltx.html