0
点赞
收藏
分享

微信扫一扫

HTTP协议断点续传

认真的老去 2021-09-29 阅读 47
日记本

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

1. Range相关字段

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

一个正常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

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

参考文章:
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

举报

相关推荐

0 条评论