HTTP断点续传

断点续传就是从文件上次中断的地方开始重新下载或上传,当下载或上传文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,这样很浪费时间。所以断点续传的功能就应运而生了。要实现断点续传的功能,需要客户端记录下当前的下载或上传进度,并在需要续传的时候通知服务端本次需要下载或上传的内容片段。

HTTP的请求上定义了断点续传相关的HTTP头Range字段和Content-Range字段。

比如说客户端在Header中设置Range=bytes22223333- 表示文件从22223333字节开始传,前面的字节不用传了。

服务器收到请求,返回206 Partial Content。 Content-Length=44445555,Content-Range=bytes22223333-44445554/44445555 。

如果文件变化了,怎么判断呢?

在RFC2616中有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。

终端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。

RFC2616中同时定义有一个If-Range头,终端如果在续传是使用If-Range。If-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。

206 Partial Content

HTTP 206 Partial Content 成功状态响应代码表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的。

如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型,同时包含 Content-Range 首部。

如果包含多个数据区间,那么整个响应的 Content-Type 首部的值为 multipart/byteranges ,其中一个片段对应一个数据区间,并提供 Content-Range 和 Content-Type 描述信息。

假如响应中包含 Content-Length,那么它的数值必须匹配它返回的内容范围的真实字节数。

If-Range

If-Range HTTP 请求头字段用来使得 Range 头字段在一定条件下起作用:当字段值中的条件得到满足时,Range 头字段才会起作用,同时服务器回复206 部分内容状态码,以及Range 头字段请求的相应部分;如果字段值中的条件没有得到满足,服务器将会返回 200 OK 状态码,并返回完整的请求资源。

字段值中既可以用 Last-Modified 时间值用作验证,也可以用ETag标记作为验证,但不能将两者同时使用。

ETag

ETag HTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。

如果给定URL中的资源更改,则一定要生成新的Etag值。 因此Etags类似于指纹,也可能被某些服务器用于跟踪。 比较etags能快速确定此资源是否变化,但也可能被跟踪服务器永久存留。

HTTP断点续传原理 状态码206 Partial Content相关推荐

  1. html状态码206,详解浏览器 206 状态码206 Partial Content

    HTTP 206 Partial Content成功状态响应代码指示请求已成功并且主体包含所请求的数据范围,如Range请求标题中所述. 如果只有一个范围,则整个响应Content-Type设置为文档 ...

  2. Http请求状态码-206

    哈喽 大家好啊 相信很多小伙伴都遇到过接口206状态 这是我最近遇到的一个很头疼的问题 首先我们打开F12看网络请求,因为有些是图片类型,有些是xhr接口类型,有些是媒体media资源类型,所以大家筛 ...

  3. HTTP状态码206和416

    HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了". TTP/1.1 200 OK是HTTP请求成功后的标准响应 HTTP/1.1 206状 ...

  4. js文件加载显示状态码206,导致页面一直显示加载中

    一.问题现象: 用户反馈平台一直显示加载中,无法登录平台,因没有其他用户反馈,且我方验证时可以打开平台,采用了如下方式均未解决问题: 1.换浏览器使用 2.清除浏览器缓存 3.咨询服务部署方是否对用户 ...

  5. net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content) 报错

    一.问题描述 最近现场实施人员反馈有个功能不能正常使用,F12查看浏览器的控制台,提示net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content)的错误 ...

  6. 浏览器 net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content) 报错解决方案

    1.nginx两层代理页面加载不出来 nginx一层代理正常,两层代理页面加载不出来,F12查看开发者模式发现报以下错误: net::ERR_CONTENT_LENGTH_MISMATCH 206 ( ...

  7. Nginx服务器js加载不全,报206 (Partial Content)错误

    问题场景 tornado服务器,配置SLB+Nginx通过80端口访问tornado服务器的时候发现前端很多比较大的js加载不完,出现报206 (Partial Content)错误(部分内容)服务器 ...

  8. html状态码206,HTTP状态码206

    在网页中有一段代码,如下,意思是HTML5的video标签加载一段视频 在chrome 的network中显示的header信息如下 这种响应是在客户端表明自己只需要目标URL上的部分资源的时候返回的 ...

  9. HTTP状态码206

    在网页中有一段代码,如下,意思是HTML5的video标签加载一段视频 <div class="video_content_left"><video autopl ...

最新文章

  1. 查找两个已经排好序的数组的第k大的元素
  2. LinuxC高级编程——进程
  3. 企业上市上市央企大面积亏损折射出啥弊端?
  4. 出租车燃油附加费之阴谋[10-22]
  5. Java编程:弗洛伊德算法(无向图所有顶点最小路径)
  6. 【cherry键盘白送】有人在云上送来一波双十一福利
  7. (简易版)c语言人机对战五子棋
  8. 010Editor的Template安装与使用
  9. 百度ai开放平台体验
  10. 关于域名用下划线的一个问题
  11. WebDav-Milton之一
  12. Gsensor旋转180°怎么处理
  13. Flink 多流转换
  14. php运维知识,分享一些linux运维的基础知识
  15. PDF中的空白页怎么删除
  16. WIN7 直装版安装教程
  17. 移动广告平台KeyMob:整合多家主流手机广告平台
  18. 多表查询(连接查询)
  19. 水滴舆情关于山西体育一周舆情总结
  20. JAVA 建造者模式

热门文章

  1. e-dialog出现额外多了一层遮罩
  2. 小程序传布尔_拥抱和传布禅宗编码
  3. 易中天:讲《从老庄到禅宗》
  4. 2022跨年烟花代码|用Python送你一场跨年烟花秀
  5. python canopen_CAN与CANOPEN在电机控制中的应用
  6. 公链应用争夺战:未来区块链生态真的“根特多,叶子少”?
  7. Google Map API使用谷歌地图api实现地点搜索功能
  8. 内地炒美股需要什么条件?有哪些美股交易基础要点
  9. matlab 中去除含有NaN的行或者列
  10. 从IPv4到IPv6为什么这么久?IPv5哪里去了?