2011-11-23 75 views
11

我正在通过Internet Explorer 9的缓存撕裂我的头发。Internet Explorer 9忽略没有缓存标头

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

我遇到的问题是,在IE9中,它始终总是使用缓存而不是使用新值。事件的顺序运行是这样的:

  1. 访问www.example.com/?color=blue
  2. Perl脚本,使用cookies,我重定向回www.example.com
  3. 颜色有蓝色,一切都如预期。
  4. 访问www.example.com/?color=red
  5. 饼干设置,设置为红色重定向,颜色,都属于正常
  6. 重访 www.example.com/?color=blue
  7. Perl脚本运行,Cookie重新设置(我已经证实了这一点),但! IE9从缓存中获取所有资源,因此重定向时我的所有颜色都保持为红色。

因此,每次访问新的URL时都会获得新的资源,但每次访问以前访问过的URL时,都会从缓存中检索它们。

以下meta标签是在<头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忽略我的标头,以及如何强制它每次检查服务器?

+0

你看过http://stackoverflow.com/questions/4360283/http-cache-control?试过私人? –

+0

好吧,我刚刚尝试将其设置为CONTENT =“PRIVATE”,并遇到同样的问题。 –

+2

尝试进行客户端API调用...在这种情况下,即使“始终从服务器刷新”也不起作用。 我现在有IE9几乎和我讨厌IE6一样多 – Vroomfundel

回答

3

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

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

这些都不是头。它们是<meta>元素,这是HTTP头的极其糟糕的替代品。我建议你阅读Mark Nottingham's caching tutorial,它详细介绍了这一点以及关于哪些缓存指令适合使用。

此外,忽略任何人告诉你将缓存设置为private使缓存在浏览器 - 它说“这是可以缓存,只要你不转发给另一个客户端”

0

刚才提到我看起来很像这个问题。但我在另一台电脑上试用了IE9,没有问题。然后去Internet选项 - >常规 - >删除并删除一切恢复正确的行为。删除缓存是不够的。

0

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

其他似乎工作的东西只有浏览器的优点,你不能依赖它。

-2

johnstok是正确的。在该代码中键入内容将允许从服务器更新内容,而不仅仅是刷新页面。

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

把这行代码放到你的部分,如果你需要有它在你的ASP代码,它应该工作。

+0

Anthony

2

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

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

现在一切正常。

干杯