我有一个从服务器返回json的action / json。
不幸的是,在IE中,浏览器喜欢缓存这个json。
如何才能使此操作不缓存?
答案 0 :(得分:3)
确保您的回复标题包含:
Cache-Control: no-cache
Pragma: no-cache
Expires=-1
答案 1 :(得分:2)
确保您的回复没有告诉浏览器该内容将来会过期。控制它有两个HTTP头。
此外,IE可能正在重新验证。这意味着IE在请求中包含一些额外信息,这些信息告诉Web服务器它在其缓存中具有哪种版本的资源。如果浏览器的缓存版本是最新版本,则您的服务器可以使用304 Not Modified
进行响应,而不是在响应中包含内容。 “Conditionatl GET请求”包括此版本控制信息。您的服务器可能会在不应该提供304响应时给出响应。
有两组控制重新验证的标头:
Last-Modified,ETag是响应头,告诉浏览器它将接收的资源版本。如果您不希望浏览器重新验证,请不要设置这些。 If-Modified-Since和If-None-Match是浏览器用于报告需要与服务器重新验证的陈旧资源版本的相应请求标头。
有各种工具可以查看服务器将哪些HTTP标头发送回浏览器。一个是Firefox扩展Live HTTP Headers。 Steve Sounders建议的另一个工具是IBM Page Detailer。我自己没有尝试过这个,但它并不依赖于你正在使用的浏览器。
答案 2 :(得分:1)
这是一个常见问题 - IE在客户端缓存所有ajax / json请求。其他浏览器没有。
要解决此问题,请生成一个随机数并将其作为变量附加到您的请求网址。这让IE误认为这是一个新的要求。
以下是javascript中的一个示例,您可以在Python中执行类似的操作:
function rand() {
return Math.floor(Math.random()*100000);
}
$("#content").load("/posts/view/1?rand="+rand());
答案 3 :(得分:1)
jQuery库具有非常好的ajax函数和控制它们的设置。其中一个被称为“缓存”,它会自动在查询中附加一个随机数,这实际上会强制浏览器不缓存页面。这可以与参数“dataType”一起设置,可以将其设置为“json”以使ajax请求获取json数据。我一直在我的代码中使用它,并且没有IE的问题。
希望这有帮助