为啥 Firebug 在视频加载请求中显示“206 Partial Content”响应?

Posted

技术标签:

【中文标题】为啥 Firebug 在视频加载请求中显示“206 Partial Content”响应?【英文标题】:Why does Firebug show a "206 Partial Content" response on a video loading request?为什么 Firebug 在视频加载请求中显示“206 Partial Content”响应? 【发布时间】:2012-04-03 01:16:05 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

见Status Codes (RFC2616 - HTTP/1.1)(注意any 2xx 代码表示“成功”):

10.2.7 206 部分内容:

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

来自Range header 部分:

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

无条件 GET 中存在 Range 标头会修改 如果 GET 成功则返回什么。其他 也就是说,响应带有状态码 206(部分 内容)而不是 200(OK)

但是,我不了解缓存和/或 ETag 的复杂性,也不了解 FireFox 中的预期内容。

【讨论】:

【参考方案2】:

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

AddType video/webm .webm

到您的 .htaccess。

【讨论】:

【参考方案3】:

根据https://httpstatuses.com/206

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

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

【讨论】:

以上是关于为啥 Firebug 在视频加载请求中显示“206 Partial Content”响应?的主要内容,如果未能解决你的问题,请参考以下文章

为啥视频没有播放,只在 swift 中显示加载程序

为啥 Firebug 不为未定义的属性显示“未捕获的类型错误”?

为啥我的 jQuery 代码不更新加载到视频元素中的实时图像?

为啥 DirectShow 加载视频字幕文件?

WEB性能测试工具

如何在Youtube中使用Javascript停止视频?