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

时间:2010-05-03 22:50:03

标签: jquery ajax internet-explorer caching

我有,我会考虑,一个简单的测试网站。单个页面,只有一个按钮。

Here is a copy of the source如果您想下载并使用它,我正在努力。

单击该按钮时,它会创建一个每秒执行一次的JavaScript计时器。执行计时器功能时,将进行AJAX调用以检索文本值。然后将该文本值放入DOM中。

我的问题是什么?

IE缓存。

破解打开任务管理器并观察当该页面中的计时器正在执行时iexplorer.exe进程(对我来说是IE 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调用的结果有任何想法?

这是iexplorer.exe进程在ProcessMonitor中的样子。我相信这张照片中显示的活动正是我试图阻止的。

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

2 个答案:

答案 0 :(得分:1)

当你告诉浏览器不要缓存对象时,你不是说“不要把它保存到磁盘上”,而是说“做任何事,但不要再使用它”。您看到的句柄号是文件句柄,只是因为它没有被用于缓存并不意味着文件没有被写入,而是一个随之而来的句柄。

你告诉IE的是当你再次要求该网址时,你保存的文件不是有效的结果......所以再去拿它,但这与它没有任何关系第一次被救了。

你看到的唯一问题是IE没有快速释放那些文件句柄......那就是IE,我无法解释那里的内部工作原理。也许其他人可以解决一些问题?

答案 1 :(得分:1)

无法真正揭示IE的内部,或者不断增长的内存和处理数量,但潜在的快速和肮脏的修复方法是为ajax调用添加一个变化的参数,可能基于你的计时器,或从当前时间滴答。

有些东西...... handler.axd?foo = varying_value_here

HTH