首页 > 解决方案 > 该视频是否被缓存?

问题描述

我想确保浏览器正在缓存我提供的视频。

我已经打开了这个测试页面:https ://itype.online/videoCacheTest

我对为什么在视频的“网络”选项卡中没有看到 304 状态感到有些困惑。相反,我看到状态 206。

我的文件是从浏览器缓存中检索的,还是每次都来自服务器?

谢谢,彼得

标签: webserverhtml5-videobrowser-cacheetag

解决方案


您共享的链接似乎已损坏(此时存在一些云可用性问题,所以这可能就是问题所在),但可以使用其他视频进行测试,并且会看到类似的行为。

最常见的流式传输视频方式值得一看:

  • 单个视频文件的简单 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 网络检查器:

在此处输入图像描述

对于 Chrome:

在此处输入图像描述

如果您想 100% 确定,您也可以使用 Wireshark - 这将显示进出您的设备的网络流量:https ://www.unified-streaming.com/academy


推荐阅读