我有一堆html5视频元素,其preload属性设置为" auto"。他们开始加载很好,但我认为他们的缓存可能有问题,因为每次我重新加载页面(没有清除缓存),他们都会重新开始。
当我在firebug中检查网络面板时,我注意到其他一切(图像和文件)给了我一个" 304未修改"消息如预期的那样,而视频(和音频)文件给了我一个" 206部分内容"消息,在重复的条目中。
" 206部分内容"当页面加载清除缓存时,响应也会出现在重复条目中,而不是" 200 OK"回应,正如预期的那样。
这是视频和音频元素的正常行为吗?如果没有,怎么可以纠正?
答案 0 :(得分:16)
当客户端要求范围时(例如“给我前2MB的视频数据”),可以从服务器发送此部分内容代码(206) 。
以块的形式下载数据至关重要,这样可以避免获取未使用的资源。 (我很少在线观看完整视频。)查看Range
标题的传出请求。
请参阅Status Codes (RFC2616 - HTTP/1.1)(请注意任何 2xx代码表示“成功”):
10.2.7 206部分内容:
服务器已完成资源的部分GET请求。 请求必须包含一个Range头字段(第14.35节),表示所需的范围,并且可能包含一个If-Range头字段(第14.27节)来发出请求有条件的。
来自Range header部分:
如果服务器支持Range标头和,则指定的范围适用于实体
- 无条件GET中存在Range标头会修改 如果GET成功则返回什么。其他 单词,响应的状态代码为206(部分 内容)而不是200(OK)。
然而,我不了解缓存和/或ETag的复杂性或FireFox的预期内容。
答案 1 :(得分:1)
在我本地开发机器上的firefox中,除非服务器配置为使用它们,否则我无法播放.webm视频。 Firebug将显示206但没有任何显示。这可以通过添加
来解决 AddType video/webm .webm
到你的.htaccess。
答案 2 :(得分:0)
根据https://httpstatuses.com/206
"服务器不得为单个范围的请求生成多部分响应,因为不请求多个部分的客户端可能不支持多部分响应。但是,如果请求了多个范围,并且只有一个范围被认为是可满足的,或者在合并后只剩下一个范围,则服务器可以生成仅具有单个主体部分的多部分/字节范围有效负载。无法处理multipart / byteranges响应的客户端绝不能生成请求多个范围的请求。
当生成多部分响应有效负载时,服务器应该按照接收到的Range头字段中出现的相应字节范围规范的相同顺序发送部件,不包括那些被认为不可满足或者合并到其他部分的范围。范围。接收多部分响应的客户端必须检查每个身体部位中存在的Content-Range头部字段,以确定该身体部分中包含哪个范围;客户不能依赖于它所请求的相同范围,也不能依赖它所请求的相同订单。"