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

Html 为什么Firefox在基于范围的查询中忽略缓存控制?,html,http,http-headers,html5-audio,http-caching,Html,Http,Http Headers,Html5 Audio,Http Caching,Web服务器能够将媒体(本例中为音频)流式传输到浏览器。浏览器使用HTML5控件来播放媒体。然而,我发现Firefox正在缓存媒体,尽管我(相信我)明确告诉它不要这样做。我有一种预感,它与206部分内容响应有关,因为一个常规的“非范围”GET和一个完整的200ok响应不会被缓存。Chrome(27)可以处理这个问题,但Firefox(21)不能: HTTP/1.1 206 Partial Content Date: Tue, 21 May 2013 17:24:29 GMT Expires: 0

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

请注意,这似乎是直接问/答这个问题,但它不起作用。。。我使用前面提到的标题

谢谢你的帮助

编辑:我还尝试添加ETag:header,但Firefox仍会缓存原始响应

编辑:包含要匹配的
内容长度:
标题(本例中为218924)似乎不会影响问题


编辑:我在bugzilla.mozilla.org上提交了一个bug,但目前还没有相关活动。

您的Firefox正在实施第13.8节。所以这种行为是正常的

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


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

谢谢您的回复。但这一部分似乎不适用于我的情况;my 206是一个特定的/有信号的部分响应,不是错误或不完整的响应。我看到的问题是Firefox正在缓存整个完整的结果资源(部分响应的集合),即使它们被标记为不可缓存。206响应是一个不完整的响应,因为它包含“少于内容长度头中指定的数据字节数”。我想这取决于该部分的解释方式。我将其理解为“如果缓存控制允许,部分结果可以放在缓存中”,而不是“部分结果可以缓存,即使它与缓存控制头相矛盾”。所以我认为这是Firefox中的一个bug。重要的部分是:“接收…”的缓存。任何缓存都不应接收该部分响应,因为标头明确禁止该操作。@idbehold我已经尝试了两种方法,没有Content-Length标头并指定了Connection:close,而Content-Length标头指定了响应内容的实际长度(可能是整个资源的一部分,但正是响应中的内容)因此,从响应的角度来看,它是完整的。您是否可以尝试使用
缓存控制:没有存储,没有缓存,必须在没有后期检查和预检查的情况下重新验证
。尝试过,没有更改…仍然缓存,没有后期检查/预检查组件我相信您可以找到解决方法。。。