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 避免缓存响应?的主要内容,如果未能解决你的问题,请参考以下文章