Firefox忽略响应标头内容范围并仅播放发送的样本

时间:2014-06-22 03:34:26

标签: firefox html5-audio audio-streaming

我为mp3文件构建了一个音频流,每次客户端点击音频时都会收到如下内容:

enter image description here

但它的作用只是播放1分钟样本而不是120分钟

enter image description here

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

不是100%肯定,因为您没有提供代码或示例流进行测试,但您对HTTP范围请求的处理已被破坏。

在您的示例请求中,客户端发送Range: bytes=0-,您的服务器响应1MiB响应:

  • Content-Length: 1048576(又名.1 MiB)
  • Content-Range: 0-1048575/...

这是错误的,客户端没有要求这个!它确实请求bytes=0-,意味着从位置0到整个流的末尾的所有数据(参见http 1.1 RFC),即响应等于没有任何Range的响应。 (IIRC,Firefox仍然发送Range: bytes=0-来检测服务器是否首先处理范围。)

这与Content-Length相结合,导致客户端(Firefox)认为整个资源的大小仅为1MiB,而不是实际大小。我想你的测试流的前1个MiB是1:06的音频。

PS:Content-Duration标题(又名RFC 3803)是浏览器根本不会实现的,只是忽略。

答案 1 :(得分:0)

只是一个想法。您是否尝试过一些http 3xx标题: ' 308恢复不完整'或者' 503服务暂时不可用'再加上' retry-after:2'或者' 413请求实体太大'加上' retry-after:2'