Internet Explorer 9忽略没有缓存标头

时间:2011-11-23 09:12:12

标签: http-headers internet-explorer-9 meta-tags

我正在通过Internet Explorer 9的缓存撕掉我的头发。

我根据查询字符串值从perl脚本设置了一系列cookie。这些cookie包含有关页面上各种内容的信息,如横幅和颜色。

我遇到的问题是,在IE9中,它总是会一直使用缓存而不是使用新值。事件序列如下:

  1. 访问www.example.com/?color=blue
  2. Perl脚本设置Cookie,我被重定向回www.example.com
  3. 颜色为蓝色,一切都如预期。
  4. 访问www.example.com/?color=red
  5. Cookie设置,重定向,颜色设置为红色,一切正常
  6. 重新访问 www.example.com/?color=blue
  7. 运行Perl脚本,重新设置cookie(我已经确认了这一点)但是! IE9从缓存中检索所有资源,因此在重定向时,我的所有颜色都保持红色。
  8. 因此,每次访问新网址时,都会获得新鲜资源,但每次访问之前访问过的网址时,都会从缓存中检索这些资源。

    以下元标记位于< head>中example.com,我认为会阻止缓存使用:

    <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会忽略我的标题,我怎样才能强制它每次检查服务器?

5 个答案:

答案 0 :(得分:7)

那些不是标题。它们是<meta>元素,它们是HTTP标头的极差替代品。我建议你阅读Mark Nottingham's caching tutorial,它会详细介绍这个以及适合使用哪些缓存指令。

另外,请忽略任何人告诉您将缓存设置为private在浏览器中启用缓存 - 它说“只要你不将它转发到另一个客户端就可以缓存

答案 1 :(得分:3)

尝试将以下内容作为HTTP标头发送(不是meta标签):

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

答案 2 :(得分:2)

我不知道这对任何人都有用,但我的电影网站(crosstastemovies.com)也有类似的问题。每当我点击“获取更多电影”按钮(它会检索新的随机批次电影)时,IE9将返回完全相同的页面并忽略服务器的响应......:P

我不得不调用一个随机变量,以防止IE9这样做。因此,我没有调用“index.php?location = rate_movies”而是将其更改为“index.php?location = rate_movies&amp; rand = RANDOMSTRING”。

现在一切都好。

干杯

答案 3 :(得分:0)

请注意我的问题看起来非常像这样。但我在另一台计算机上尝试过IE9,没有问题。然后转到Internet选项 - &gt;一般 - &gt;删除并删除所有内容恢复了正确的行为。删除缓存是不够的。

答案 4 :(得分:0)

HTML5指定的唯一项目是内容类型,默认样式和刷新。 See the spec.

其他任何似乎都有用的东西只有浏览器的优雅,你不能依赖它。