当HTTP头中没有设置Accept-Ranges时,浏览器音频播放失败;为什么?

4
我最近在Firefox或Chrome中打开音频文件时发现了一件事情(使我感到惊讶)。如果我不指定HTTP响应头“Accept-Ranges: bytes”,Firefox将无法在播放结束前确定ogg文件的长度(以秒为单位)。 Chrome将发现ogg文件的长度(以秒为单位),但当其达到末尾并崩溃时,音频播放器似乎会崩溃,并拒绝在崩溃后重新播放文件。未测试其他浏览器。
有效的Http响应头:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: application/ogg
Content-Length: 245646

失败的Http响应头:

HTTP/1.1 200 OK
Content-Type: application/ogg
Content-Length: 245646

这对我来说很奇怪,因为我没有使用任何部分内容范围。我的服务器实现甚至不支持它们(所以我认为我的服务器在说“Accept-Ranges:bytes”时可能是在撒谎)。我当然不明白为什么播放器需要这个头文件。这两个浏览器都有bug吗?当我没有设置Accept-Ranges头文件时,这些bug就会暴露出来吗?这对我来说似乎不太可能。有人能解释一下吗?

谢谢!

1个回答

0

不确定这是一个错误还是对标准的歪曲解释 - 第14.5节。标准规定了MAY而不是MUST...

另一方面,为了能够使用音频流和/或寻找等功能,实现的音频播放模块可能需要此头文件...您可以尝试提交“Accept-Ranges:none”以查看会发生什么...如果它们有点符合http 1.1标准,那么它就可以正常工作...


“Accept-Ranges: none”会导致两个浏览器都出现播放问题,就像未指定标头一样。 - Jim
我认为这是客户端中的一个 bug。默认假设(在规范中)是服务器支持范围请求,因此服务器不必包含此标头。 - james.garriss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接