为什么 Firefox 忽略基于范围查询的缓存控制?

2024-02-16

Web 服务器能够将媒体(本例中为音频)传输到浏览器。浏览器使用 HTML5 控件来播放媒体。然而,我发现 Firefox 正在缓存媒体,尽管我(相信我)明确告诉它不要这样做。我有预感,它与 206 部分内容响应有关,因为带有完整 200 OK 响应的常规“非范围”GET 不会被缓存。 Chrome (27) 可以正常处理,但 Firefox (21) 不能:

HTTP/1.1 206 Partial Content
Date: Tue, 21 May 2013 17:24:29 GMT
Expires: 0
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Disposition: attachment; filename="audio.wav"
Content-Type: audio/x-wav
Connection: close
Accept-Ranges: bytes
Content-Range: bytes 0-218923/218924

有人知道如何让 Firefox 不缓存这个吗?当我单击播放同名的其他音频文件时,Firefox 只会播放会话中单击(缓存)的第一个音频文件,而不是从服务器重新获取新音频文件。

注意这个问题 https://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers似乎直接询问/回答这个问题,但它不起作用......我使用提到的标题。

谢谢你的帮助。

EDIT:我也尝试添加 ETag: 标头,但 Firefox 仍然缓存原始响应。

EDIT: 包括一个Content-Length:匹配的标头(本例中为 218924)似乎不会影响该问题。

EDIT:我已在 bugzilla.mozilla.org 上提交了一个错误,但目前还没有任何活动。


您的 Firefox 正在实施第 13.8 节rfc2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.8。所以这种行为是可以的。

13.8 错误或不完整的响应缓存行为

接收到不完整响应的缓存(例如,响应较少) 比 Content-Length 标头中指定的数据字节数)可以存储 回复。然而,缓存必须将其视为部分响应。 部分响应可以按照第 13.5.4 节所述进行组合;这 结果可能是完整响应,也可能仍然是部分响应。一个缓存 未经明确说明,不得向客户端返回部分响应 使用 206(部分内容)状态代码对其进行标记。 A 缓存不得使用状态代码 200 返回部分响应 (好的)。

部分响应可能会(也可能不会)被存储。所以Chrome和Firefox都遵循规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Firefox 忽略基于范围查询的缓存控制? 的相关文章