3

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 只会播放会话中单击(缓存)的第一个文件,而不是从服务器重新获取新文件。

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

谢谢你的帮助。

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

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

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

4

1 回答 1

1

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

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

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

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

于 2013-05-30T11:06:28.897 回答