Internet Explorer 9 忽略 no cache 头信息

11

我对Internet Explorer 9的缓存问题十分苦恼。

我从一个Perl脚本中根据查询字符串的值设置了一系列cookies。这些cookies保存页面上各种元素的信息,例如横幅和颜色。

我的问题是,在IE9中它总是使用缓存而不是新值。事件的顺序如下:

  1. 访问www.example.com/?color=blue
  2. Perl脚本设置Cookie,我被重定向回www.example.com
  3. 颜色是蓝色的,一切都符合预期。
  4. 访问www.example.com/?color=red
  5. 设置Cookies,重定向,将颜色设置为红色,一切正常
  6. 重新访问 www.example.com/?color=blue
  7. Perl脚本运行,Cookies被重新设置(我已经确认),但是!IE9从缓存中检索所有资源,因此在重定向时我的所有颜色都保持为红色。

所以,每次我访问一个新的URL它就会获取新资源,但是每次我访问以前访问过的URL它都会从缓存中检索资源。

以下meta标签位于example.com的<head>中,我认为它们应该可以防止使用缓存:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="EXPIRES" CONTENT="0">

说实话,我也尝试过使用<META HTTP-EQUIV="EXPIRES" CONTENT="-1">,但IE9好像忽略了所有这些指令。到目前为止,在这个浏览器中唯一成功的方法是使用开发人员工具,并确保将其手动设置为“始终从服务器刷新”。

为什么IE会忽略我的头文件,如何强制它每次都检查服务器?


你看过http://stackoverflow.com/questions/4360283/http-cache-control吗?尝试过使用private吗? - Oleg Mikheev
好的,我刚刚尝试将其设置为CONTENT="PRIVATE",但我遇到了同样的问题。 - Andy F
2
尝试进行客户端API调用...在这种情况下,即使“始终从服务器刷新”也无法工作。 我现在几乎和我讨厌IE6一样讨厌IE9。 - Vroomfundel
6个回答

7
那些不是标题。它们是 <meta> 元素,这是 HTTP 标题的极差替代品。我建议您阅读 Mark Nottingham 的缓存教程,它详细介绍了此问题以及适合使用的缓存指令。
此外,请忽略任何告诉您将缓存设置为 private 的人。那会在浏览器中启用缓存 - 它表示 “只要您不将其转发给另一个客户端”,缓存就可以使用。

3

请尝试将以下内容作为HTTP标头(而非标签)发送:

Cache-Control: private, must-revalidate, max-age=0
Expires: Thu, 01 Jan 1970 00:00:00

2
我不知道这是否对任何人有用,但是我在我的电影网站(crosstastemovies.com)上遇到了类似的问题。每当我点击“获取更多电影”按钮(该按钮检索新的随机电影批次以供评分),IE9都会返回完全相同的页面并忽略服务器的响应... :P
为了防止IE9这样做,我必须调用一个随机变量。因此,我将“index.php?location=rate_movies”更改为“index.php?location=rate_movies&rand=RANDOMSTRING”。
现在一切都好了。
干杯

0

HTML5只规定了content-type、default-style和refresh这三个项目。请参阅规范。

其他任何看起来可行的东西都只是浏览器的恩赐,你不能依赖它。


0

我只想提一下,我遇到了一个非常类似的问题。但是我在另一台电脑上尝试了IE9,没有出现任何问题。然后进入“Internet选项”->“常规”->“删除”,删除所有内容可以恢复正确的行为。仅删除缓存是不够的。


-2

johnstok 是正确的。输入那段代码将允许内容从服务器更新,而不仅仅是刷新页面。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8; Cache-Control: no-cache" />

如果您需要在ASP代码中使用它,将此行代码放入您的
中即可正常工作。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8; Cache-Control: no-cache" /> - Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接