浏览器里播放视频时背后的数据传输方法
先看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(使用断点续传方式)
- 点赞
- 收藏
- 关注作者
评论(0)