浏览器里播放视频时背后的数据传输方法

举报
黄生 发表于 2021/09/22 11:22:31 2021/09/22
【摘要】 先看2张图:和这个是Jmeter完成请求后的,请求头和响应头。其中要关注的,是请求头中的:Range以及响应头中的:Content-Range其实就是,这个视频文件比较大的,大小有132M,然后浏览器播放时,并不是全部请求下来,而只是请求了前面的500K的内容,然后就开始播放啦,这个很合理嘛。以下内容摘自:https://blog.csdn.net/thewindkee/article/de...

先看2张图:

这个是Jmeter完成请求后的,请求头和响应头。

其中要关注的,是请求头中的:Range

以及响应头中的:Content-Range

其实就是,这个视频文件比较大的,大小有132M,然后浏览器播放时,并不是全部请求下来,而只是请求了前面的500K的内容,然后就开始播放啦,这个很合理嘛。

以下内容摘自:https://blog.csdn.net/thewindkee/article/details/80189434

http协议从1.1开始支持获取文件的部分内容,这为并行下载以及断点续传提供了技术支持。

它通过在Header里两个参数实现的,客户端发请求时对应的是Range,服务器端响应时对应的是Content-Range

Range参数还支持多个区间,用逗号分隔,这时response的Content-Type不再是原文件mime类型,而用一种multipart/byteranges类型表示。

所以平时下载的时候可以多线程下载各部分, 最后合起来。

Range

用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:

Range:(unit=first byte pos)-[last byte pos]

Range 头部的格式有以下几种情况:

Range: bytes=0-499 表示第 0-499 字节范围的内容 
Range: bytes=500-999 表示第 500-999 字节范围的内容 
Range: bytes=-500 表示最后 500 字节的内容 
Range: bytes=500- 表示从第 500 字节开始到文件结束部分的内容 
Range: bytes=0-0,-1 表示第一个和最后一个字节 
Range: bytes=500-600,601-999 同时指定几个范围

Content-Range

用于响应头中,在发出带 Range 的请求后,服务器会在 Content-Range 头部返回当前接受的范围和文件总大小。一般格式:

Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]

例如:

Content-Range: bytes 0-499/22400

0-499 是指当前发送的数据的范围,而 22400 则是文件的总大小。

而在响应完成后,返回的响应头内容也不同:

HTTP/1.1 200 Ok(不使用断点续传方式) 
HTTP/1.1 206 Partial Content(使用断点续传方式)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。