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上提交了一个错误,但此时没有任何活动。
答案 0 :(得分:1)
您的Firefox正在实施rfc2616的第13.8节。所以这种行为没问题。
13.8错误或不完整的响应缓存行为
接收不完整响应的缓存(例如,使用较少的响应 数据字节数比Content-Length标头中指定的数据少。可以存储 响应。但是,缓存必须将其视为部分响应。 部分答复可以按照第13.5.4节的描述进行组合;该 结果可能是完整的响应,或者可能仍然是部分的。缓存 在没有明确的情况下,不得向客户端返回部分响应 使用206(部分内容)状态代码标记它。一个 高速缓存绝不能使用状态代码200返回部分响应 (OK)。
可能(或可能不)存储部分回复。所以Chrome和Firefox都遵循这些规则。