Python 禁用挂架中的浏览器缓存

Python 禁用挂架中的浏览器缓存,python,internet-explorer,caching,pylons,Python,Internet Explorer,Caching,Pylons,我有一个action/json,它从服务器返回json 不幸的是,在IE中,浏览器喜欢缓存这个json 如何才能使此操作不缓存?这是一个常见的问题——IE在客户端缓存所有ajax/json请求。其他浏览器则不然 要解决这个问题,请生成一个随机数,并将其作为变量附加到请求url中。这使我误以为这是一个新的要求 下面是一个javascript示例,您可以在Python中执行类似的操作: function rand() { return Math.floor(Math.random()*100

我有一个action/json,它从服务器返回json

不幸的是,在IE中,浏览器喜欢缓存这个json

如何才能使此操作不缓存?

这是一个常见的问题——IE在客户端缓存所有ajax/json请求。其他浏览器则不然

要解决这个问题,请生成一个随机数,并将其作为变量附加到请求url中。这使我误以为这是一个新的要求

下面是一个javascript示例,您可以在Python中执行类似的操作:

function rand() {
    return Math.floor(Math.random()*100000);
}

$("#content").load("/posts/view/1?rand="+rand());

确保您的回复没有告诉浏览器内容将在将来过期。此控件有两个HTTP头

  • 到期
  • 缓存控制-此标头有许多可能的值,但控制过期的值是max age=foo
  • 此外,IE可能正在重新验证。这意味着IE在请求中包含一些额外的信息,这些信息告诉web服务器缓存中资源的版本。如果浏览器的缓存版本是最新版本,则服务器可以响应
    304 Not Modified
    ,并且不在响应中包含内容。“Conditionatl GET请求”包括此版本控制信息。您的服务器可能会在不应该的时候给出304个响应

    有两组标头控制重新验证:

  • 上次修改+如果自
  • ETag+如果不匹配
  • Last Modified和ETag是响应头,它们告诉浏览器将要接收的资源的版本。如果不希望浏览器重新验证,请不要设置这些。If-Modified-Since和If-None-Match是浏览器用于报告过时资源版本的相应请求头,它需要与服务器重新验证


    有各种工具可以查看服务器将哪些HTTP头发送回浏览器。一个是Firefox扩展。另一个推荐的工具是。我自己没有尝试过这个,但它不取决于您使用的浏览器。

    确保您的响应标题具有:

    Cache-Control: no-cache
    Pragma: no-cache
    Expires=-1
    

    jQuery库有非常好的ajax函数和控制它们的设置。其中一个称为“缓存”,它会自动向查询中添加一个随机数,从而强制浏览器不缓存页面。这可以与参数“dataType”一起设置,该参数可以设置为“json”,以使ajax请求获得json数据。我一直在我的代码中使用它,并且在IE上没有问题


    希望这能有所帮助

    我也喜欢这种方法,这也是我目前正在做的,但我更喜欢让标头告诉IE不要缓存我没有意识到可以为json请求设置不缓存标头。如果你能做到的话,这绝对是一个更好的解决方案。你肯定不是说“过期”后有一个等号吧?