【问题标题】:Why is Firefox ignoring cache control on Range-based queries?为什么 Firefox 忽略对基于范围的查询的缓存控制?
【发布时间】:2013-05-16 13:56:45
【问题描述】:

Web 服务器能够将媒体(本例中为音频)流式传输到浏览器。浏览器使用 HTML5 控件来播放媒体。然而,我发现 Firefox 正在缓存媒体,即使我(相信我)明确告诉它不要这样做。我有一种预感,它与 206 Partial Content 响应有关,因为带有完整 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 只会播放会话中单击(缓存)的第一个音频文件,而不是从服务器重新获取新的音频文件。

请注意,this question 似乎直接询问/回答这个问题,但它不起作用......我使用提到的标题。

感谢您的帮助。

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

编辑:包含要匹配的 Content-Length: 标头(本例中为 218924)似乎不会影响问题。

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

【问题讨论】:

  • 你能用Cache-Control: no-store, no-cache, must-revalidate试试吗,不用后检查和预检查。
  • 试过了,没有变化...仍然缓存没有后/预检查组件
  • 我相信你能想出一些办法来解决它......

标签: html http http-headers html5-audio http-caching


【解决方案1】:

您的 Firefox 正在执行 rfc2616 的第 13.8 节。所以这种行为是可以的。

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

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

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

【讨论】:

  • 感谢您的回复。不过,这部分似乎不适用于我的情况;我的 206 是特定/有信号的部分响应,而不是错误或不完整的响应。我看到的问题是 Firefox 正在缓存整个完整的结果资源(部分响应的集合),即使它们被标记为不可缓存。
  • 206 响应不完整的响应,因为它包含“比 Content-Length 标头中指定的数据字节少”。
  • 我想这取决于该部分的解释方式。我会将其解读为 “如果 Cache-Control 允许,部分结果可能会被放入缓存”,而不是 “部分结果可能会被缓存,即使它与缓存控制标头”。所以我会说这是Firefox中的一个错误。重要的部分是:“接收...的缓存”。 没有缓存应该收到部分响应,因为标头明确禁止这样做。
  • @idbehold 我已经尝试了两种方法,没有 Content-Length 标头并指定 Connection: close,并且 Content-Length 标头指定了响应内容的实际长度(可能是完整资源的部分,但正是响应中的内容),因此从响应的角度来看它是完整的。
猜你喜欢
  • 2019-12-01
  • 2014-04-24
  • 2019-12-17
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多