10

在 HTML5 音频的上下文中,如果向服务器发送带有以下标头的请求:

范围:字节=0-

将回应

内容范围:字节 0-499/1234

所有现代浏览器都能正确处理吗?当需要 byte[500] 时,浏览器会自动知道请求下一个块吗?我是否正确解释了以下规范?

如果所有先决条件都为真,服务器支持目标资源的 Range 头字段,并且指定的范围是
有效且可满足的(如第 2.1 节中定义的),服务器应该
发送 206(部分内容)响应有效载荷包含一个
或多个部分表示,这些部分表示对应
于第 4 节中定义的请求的可满足范围。

我一直在阅读以下规范:https ://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p5-range-22

4

2 回答 2

1

如果该请求是由浏览器通过分配视频标签的音频的 src 属性在内部生成的,那么是的,媒体元素知道如何处理字节范围请求并为下一个片段发出后续请求。不需要额外的逻辑。

于 2015-06-09T23:39:35.550 回答
1

听起来您正在正确解释规范。但是,ServiceWorkers 响应 Range Requests的示例表明,对开放式请求的预期响应0-是整个 byte range。然后,浏览器将响应流式传输到某个启发式,如果用户寻找已流式传输的范围之外的范围,则启动后续的开放式请求。

换句话说,如果有一个带有1000字节的文件:第一个请求总是Range: bytes=0-. 浏览器决定加载 100 个字节。用户搜索到最后,浏览器发送另一个请求Range: bytes=900-

实际上,我从未见过浏览器请求明确的、封闭的范围(如Range: bytes=0-100. 他们似乎也没有使用范围大小,即 1234 in Content-Range: bytes 0-499/1234。我猜这是因为某些服务器可能会发送*未知持续时间(或连续实时播放)的文件。

警告:这是基于我的观察,主要是 Firefox、Chrome 和 iOS Safari。行为可能因浏览器供应商、版本等而异。

于 2020-05-12T15:01:46.110 回答