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

时间:2013-05-21 17:34:50

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

Web服务器能够将媒体(在此示例中为音频)流式传输到浏览器。浏览器使用HTML5控件来播放媒体。然而,我发现Firefox正在缓存媒体,即使我(相信我)明确告诉它不要。我有一种预感,它与206 Partial Content响应有关,因为常规的“非范围”GET具有完整的200 OK响应不会被缓存。 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上提交了一个错误,但此时没有任何活动。

1 个答案:

答案 0 :(得分:1)

您的Firefox正在实施rfc2616的第13.8节。所以这种行为没问题。

  

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

     

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

可能(或可能不)存储部分回复。所以Chrome和Firefox都遵循这些规则。