Firefox 避免缓存响应?

Posted

技术标签:

【中文标题】Firefox 避免缓存响应?【英文标题】:Firefox avoid cached response? 【发布时间】:2012-05-09 16:03:32 【问题描述】:

在 Firefox 12 上,当我连续请求两个具有相同 URI 但具有不同请求标头(不同接受字段)的资源时,响应是第一个请求的缓存响应。第一个请求是正确返回的页面的text/html请求,第二个请求是这样的:

请求的 URL 是:http://localhost:8080/test/ 带有这些标头:

响应标头

内容类型 text/html;charset=ISO-8859-1 日期 2012 年 4 月 29 日星期日 19:41:53 GMT 服务器 Apache-Coyote/1.1

请求标头

接受申请/json 接受编码 gzip,放气 接受语言 en-us,en;q=0.5 连接保持活动 Cookie JSESSIONID=DB75F9F730D72D040CB5781903B60E87 主机本地主机:8080 推荐人http://localhost:8080/test/ 用户代理 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0 X-Requested-With XMLHttpRequest

您有什么建议可以避免这个问题吗?提前致谢。

【问题讨论】:

对抗浏览器缓存的可靠方法是随机查询字符串参数。 @IliaG 这应该是一个答案,而不是评论。另见Using XMLHttpRequest。 http 响应标头中没有任何新鲜信息?像缓存控制,最后修改,过期?因为我认为除非服务器通过 http 标头声明它可缓存,否则 firefox 不会缓存响应。 【参考方案1】:

如果您的服务器根据不同的 Accept 标头发送不同的内容,它应该发送“Vary: Accept”来告诉缓存 Accept 标头需要成为缓存键的一部分。你的服务器这样做了吗?

【讨论】:

Jerey 的线路是:return Response.ok().header(HttpHeaders.VARY, HttpHeaders.ACCEPT).entity(viewable).build();【参考方案2】:

$.ajax(...) 参数中使用cache:false。这会向查询字符串添加一个随机值,以确保不会发生缓存。

【讨论】:

不应禁用缓存,但仍由浏览器完成。缓存应该知道不同的 mime 类型。 @koppor:我认为这取决于Vary 标头。【参考方案3】:

使用以下行将缓存 false 应用于使用 jquery 发出的所有 ajax 请求

$.ajaxSetup( cache: false );

ajaxSetup的更多选项

【讨论】:

这将禁用缓存。我认为应该缓存响应。标题字段“Vary: Accept”似乎是正确的位置。另请参阅subbu.org/blog/2007/12/vary-header-for-restful-applications。

以上是关于Firefox 避免缓存响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置firefox缓存自动清理

如何在 Firefox 上关闭缓存?

Firefox插件删除一个域的缓存和cookie?

Firefox缓存文本区域值?

如何清除 Firefox 中的 Service Worker 缓存?

Firefox 5“缓存”301 重定向