如何使用 206 Partial Content 使浏览器请求范围更小

How to make browser request smaller range with 206 Partial Content

我目前正在制作一个视频流服务,其中视频以每个大约 1MB 的块进行转码。 Firefox 的HTML5 播放器、Chrome 和IE 都尽力请求部分内容(通过将Range header 添加到它们的请求中)。不幸的是,大多数时候这个 header 看起来像这样:

Range:bytes=0-

我不想return完整的内容,但只有1MB的内容,所以我return这个:

Content-Range:bytes 0-1048575/5074944

现在 Chrome 完全接受并继续请求部分内容,直到达到总长度。然而,Firefox 只发出一个包含部分内容而不是全部内容的请求。 Firefox 认为这是完整的内容,因此不会播放完整的视频,只会播放其中的一部分。我如何才能在 Firefox 中获得与在 Chrome 中相同的行为?我尝试 returning 416 Range not Satisfiable 但 Chrome 和 Firefox 似乎在收到此状态代码后都在请求。

所以我最终放弃了这个,看了一下Firefox的源代码。在 Firefox 收到与预期不同的范围的地方,开发人员会放置一条评论,询问在这种情况下该怎么做。规范没有指定在这种情况下应该做什么,因此 Firefox 选择什么都不做。 Chrome 更有创意一点,想出了开发人员认为最好的回应(这绝对是我想要的结果)。

看来我不是唯一遇到这个问题的人,否则我也不会得到赞成票。问题是:为了让 Firefox 纠正这个问题,我们需要对规范进行更改,我认为这几乎是不可能的。因此,我将关闭此问题并将此 post 标记为答案。

问题'How would I get the same behavior in Firefox as I have in Chrome?'的答案是升级到Firefox 57.0 (Quantum)。这个版本的 Firefox(在我自己的服务器代码的测试中,它对部分响应大小进行了相同的限制)能够在视频播放时请求额外的部分内容,与 Chrome 和 IE 的方式大致相同.

话虽如此,如果我在视频中向后搜索,Firefox 将从新位置开始播放部分内容(大概使用该位置的缓存部分内容)但随后无法请求(或使用缓存)缓冲内容用完时的部分内容 - 而不是跳到结尾。

看起来 Firefox 开发人员试图解决部分内容小于预期的问题,但在寻求 and/or 缓存方面还没有完全正确。

我很想知道关于 "what to do" 的原始评论在 Firefox 源代码中的什么位置,以找出实际做了什么,并可能向 Firefox 开发人员提供适当的反馈。