我正在通过Internet Explorer 9的缓存撕掉我的头发。
我根据查询字符串值从perl脚本设置了一系列cookie。这些cookie包含有关页面上各种内容的信息,如横幅和颜色。
我遇到的问题是,在IE9中,它始终会使用缓存而不是使用新值。事件序列如下所示:
- 访问www.example.com/?color=blue
- Perl脚本设置cookie, 我被重定向回www.example.com
- 颜色是蓝色,一切都如预期。
- 访问www.example.com/?color=red
- 饼干设置,重定向,颜色设置为红色,一切正常
- 重游 www.example.com/?color=blue
- Perl脚本运行,cookie被重置(我已经确认了这一点)但是! IE9从缓存中检索所有资源,因此在重定向时,我的所有颜色都保持红色。
因此,每次访问新URL时,它都会获得新鲜的资源,但每次访问以前访问过的URL时,它都会从缓存中检索它们。
以下元标记位于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忽略我的标题,我怎样才能强制它每次检查服务器?
那些不是标题。他们是 <meta>
元素,它是HTTP标头的极差替代品。我建议你看看 Mark Nottingham的缓存教程,它详细介绍了这一点以及适合使用的缓存指令。
另外,请忽略任何告诉您将缓存设置为的人 private
。那 使 在浏览器中缓存 - 它说 “只要您不将其转发给其他客户端,这可以缓存”。
尝试将以下内容作为HTTP标头发送(不是 meta
标签):
Cache-Control: private, must-revalidate, max-age=0
Expires: Thu, 01 Jan 1970 00:00:00
我不知道这对任何人都有用,但我的电影网站(crosstastemovies.com)也有类似的问题。每当我点击按钮“获取更多电影”(其中检索新的随机批次电影以进行评级)时,IE9将返回完全相同的页面并忽略服务器的响应......:P
我不得不调用一个随机变量,以防止IE9这样做。因此,我没有调用“index.php?location = rate_movies”而是将其更改为“index.php?location = rate_movies&rand = RANDOMSTRING”。
一切都好了。
干杯
请问我有一个看起来非常像这样的问题。但是我在另一台计算机上尝试过IE9,没有问题。然后转到Internet选项 - >常规 - >删除和删除 一切 恢复正确的行为。删除缓存是不够的。
HTML5指定的唯一项目是内容类型,默认样式和刷新。 请参阅规格。
其他任何似乎都有用的东西只有浏览器的优雅,你不能依赖它。
约翰斯托克是对的。键入该代码将允许内容从服务器更新,而不仅仅是刷新页面。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8; Cache-Control: no-cache" />
如果你需要在你的asp代码中使用它,那么将这行代码放入你的部分,它应该工作。