2012-04-29 73 views
1

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

请求的URL是:http://localhost:8080/test/这些标题:

响应头

Content-Type text/html; charset = ISO-8859-1
日期2012年4月29日19:41:53 GMT
Server Apache-Coyote/1.1

请求头

接受应用程序/ JSON
接受编码gzip的,放气
接受语言EN-US,EN; Q = 0.5
连接保持
饼干JSESSIONID = DB75F9F730D72D040CB5781903B60E87
Host localhost:8080
Referer http://localhost:8080/test/
的User-Agent的Mozilla/5.0(Windows NT的6.1; WOW64; rv:12.0)Gecko/20100101 Firefox/12.0 X请求XMLHttpRequest

您有任何建议可以避免此问题吗?提前致谢。

+0

的法子打浏览器缓存是一个随机的查询字符串参数。 –

+1

@IliaG这应该是一个答案,而不是评论。另请参见[使用的XMLHttpRequest(https://developer.mozilla.org/en/XMLHttpRequest/Using_XMLHttpRequest)。 – Neil

+0

没有一个http响应头文件有任何新鲜度信息?像缓存控制,最后修改,过期?因为我认为firefox不会缓存响应,除非服务器已经通过http头声明了缓存。 – goat

回答

0

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

+0

缓存不应该被禁用,但仍然由浏览器来完成。缓存应该知道不同的MIME类型。 – koppor

+0

@ koppor:我认为这取决于'Vary'标头。 – ThiefMaster

0

使用下面的行申请缓存假所有Ajax请求使用jQuery由ajaxSetup

+0

这将禁用缓存。我假设应该缓存响应。标题字段“Vary:Accept”似乎是正确的地方。另见http://www.subbu.org/blog/2007/12/vary-header-for-restful-applications。 – koppor

1

$.ajaxSetup({ cache: false }); 

更多的选择。如果你的服务器是基于不同的Accept标头发送不同的内容,它应该是发送“Vary:Accept”告诉缓存Accept头需要成为缓存键的一部分。你的服务器是这样做的吗?

+0

Jerey的行是:'return Response.ok()。header(HttpHeaders.VARY,HttpHeaders.ACCEPT).entity(viewable).build();' – koppor