问题描述
我要确保浏览器可以缓存正在提供的视频。
我已经打开了此测试页:https://itype.online/videoCacheTest
我为为什么我在视频的“网络”标签中看不到304状态感到困惑。相反,我看到状态206。
谢谢, 彼得
解决方法
您共享的链接似乎已损坏(此时存在一些云可用性问题,所以也许是问题所在),但可以通过其他视频进行测试,并且会看到类似的行为。
值得一看的是最常见的视频流方式:
- 单个视频文件的简单HTTP流传输
- 通过诸如HLS或MPEG DASH之类的专用流协议进行流
对于简单的HTTP流,通常使用字节范围请求下载视频文件。从理论上讲,只要缓存可以处理范围请求,那么缓存就应该可以缓存响应-来自HTTP缓存规范(RFC 2616 Fielding等):
接收到的状态码为200、203、206、300、301或410的响应可以由高速缓存存储,并用于响应后续请求(取决于过期机制),除非高速缓存控制指令禁止缓存。但是,不支持Range和Content-Range标头的缓存绝对不能缓存206(部分内容)响应。
实际上,似乎许多浏览器仍然没有缓存206响应,如您所见。有时,由于某些浏览器为了加快下载速度,可能会首先增加对完整视频的第一个请求,因此,有时很难观察到这种行为。当视频长度已知时,该请求将被取消并由范围请求代替。
HLS和DASH带来了进一步的复杂性-使用ABR,您可以在服务器上创建视频的多个比特率版本,每个版本都分成大块。播放器会根据多种因素决定下载下一个视频块的分辨率,这些因素通常包括网络条件以及设备的显示尺寸和功能。
因此,当使用HLS或DASH时,由于网络条件等可能发生变化,因此每次播放视频时不一定下载相同的块。
通常,您可以在浏览器检查器上看到某个特定项目是从网络上下载还是从内存/缓存中加载-例如使用Safari Web检查器:
对于Chrome:
如果您想100%确定,也可以使用Wireshark-这将显示往返设备的网络流量:https://www.unified-streaming.com/academy