17

我有一堆 html5 视频元素,它们的 preload 属性设置为“auto”。它们开始加载很好,但我认为它们的缓存可能存在问题,因为每次我重新加载页面(不清除缓存)时,它们都会重新开始。

当我在 firebug 中检查“网络”面板时,我注意到其他所有内容(图像和文件)都给我一个“304 未修改”消息,而视频(和音频)文件给我一个“206 部分内容”消息,在重复的条目中。

“206 部分内容”响应也出现在重复条目中,当页面加载并清除缓存时,而不是预期的“200 OK”响应。

这是视频和音频元素的正常行为吗?如果不是,如何纠正?

4

3 回答 3

20

当客户端请求范围(例如“给我前 2MB 的视频数据”)时,可以从服务器发送部分内容代码 (206 )。

以块的形式下载数据以避免获取未使用的资源是至关重要的。(我很少在线观看完整的视频。)查看对Range标头的传出请求。

请参阅状态代码 (RFC2616 - HTTP/1.1)(请注意,任何2xx 代码都表示“成功”):

10.2.7 206 部分内容:

服务器已完成对资源的部分 GET 请求。请求必须包含一个 Range 标头字段(第 14.35 节)指示所需的范围,并且可以包含一个 If-Range 标头字段(第 14.27 节)以使请求有条件。

Range 标题部分:

如果服务器支持 Range 标头并且指定的范围或范围适用于实体

  • 如果 GET 成功,则无条件 GET 中存在 Range 标头会修改返回的内容。换句话说,响应携带状态码 206 (Partial Content) 而不是 200 (OK)

但是,我不了解缓存和/或 ETag 的复杂性或在 FireFox 中的期望。

于 2012-03-18T01:54:57.757 回答
0

在我的本地开发机器上的 Firefox 中,除非服务器配置为使用它们,否则我无法播放 .webm 视频。Firebug 会显示 206 但什么都不会显示。这可以通过添加来解决

AddType video/webm .webm

到您的 .htaccess。

于 2013-10-08T08:05:36.823 回答
0

根据https://httpstatuses.com/206

“服务器不得对单个范围的请求生成多部分响应,因为不请求多个部分的客户端可能不支持多部分响应。但是,服务器可以生成只有一个正文部分的多部分/字节范围有效负载,如果请求了多个范围,但发现只有一个范围是可满足的,或者合并后只剩下一个范围。无法处理多部分/字节范围响应的客户端不得生成请求多个范围的请求。

当生成多部分响应负载时,服务器应该按照相应字节范围规范出现在接收到的 Range 头字段中的相同顺序发送部分,不包括那些被认为不可满足或合并到其他范围中的范围。接收多部分响应的客户端必须检查每个正文部分中存在的 Content-Range 标头字段,以确定该正文部分中包含哪个范围;客户端不能依赖于接收它请求的相同范围,也不能依赖于它请求的相同顺序。”

于 2017-06-01T12:29:06.793 回答