代码之家  ›  专栏  ›  技术社区  ›  Joshua Hayworth

IE是否完全忽略Ajax请求的缓存控制头?

  •  0
  • Joshua Hayworth  · 技术社区  · 14 年前

    我有一个简单的测试网站。一页一个按钮。

    Here is a copy of the source 如果你想下载并玩的话,我正在和你合作。

    单击该按钮时,它会创建一个每秒执行一次的javascript计时器。执行计时器函数时,会调用Ajax来检索文本值。然后将该文本值放入DOM。

    我的问题是什么?

    IE缓存。

    打开“任务管理器”,并在该页中的计时器执行时,观察iexplorer.exe进程(即8.0.7600.16385)发生了什么。

    看到内存和句柄数变大了吗?

    alt text http://www.joshuahayworth.com/content/HandleCount.png

    为什么当所有帐户的缓存都关闭时,会发生这种情况?我在$.Ajaxsetup中将jquery缓存选项设置为false。我已将cachecontrol头设置为no cache和no store。Expires头被设置为datetime.now.adddays(-1)。头在后面的页面代码和HTTP处理程序的响应中设置。

    有人知道我如何阻止IE缓存Ajax调用的结果吗?

    下面是processmonitor中的iexplorer.exe进程。我相信这张图片中显示的活动正是我试图阻止的。

    alt text http://www.joshuahayworth.com/content/ProcessMonitor.png

    2 回复  |  直到 14 年前
        1
  •  1
  •   Nick Craver    14 年前

    当您告诉浏览器不要缓存对象时,您不是说“不要将此保存到磁盘”,而是说“做任何事情,但不要再次使用它”。您看到的句柄数是 文件 句柄,仅仅因为它没有被用于缓存并不意味着一个文件没有被写入,一个句柄也没有被写入。

    你要说的是,当你再次请求该URL时,你保存的文件对它来说不是一个有效的结果……所以,再次获取它,但这与第一次保存它没有任何关系。

    你看到的唯一问题是,不要很快放弃那些文件句柄……那就是,我不能解释里面的工作原理。也许其他人可以发光?

        2
  •  1
  •   seanb    14 年前

    无法真正揭示IE的内部结构,或者内存和句柄数量的增长,但是一个潜在的快速而肮脏的修复方法是将不同的参数放入Ajax调用中,可能基于计时器,或者从当前时间开始计时。

    沿着…handler.axd这条线?foo=这里的变量值

    高温高压