Internet Explorer 9忽略没有缓存标头

And*_*y F 11 meta-tags http-headers internet-explorer-9

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

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

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

  1. 访问www.example.com/?color=blue
  2. Perl脚本设置co​​okie,我被重定向回www.example.com
  3. 颜色是蓝色的,一切都如预期的那样.
  4. 访问www.example.com/?color=red
  5. 饼干设置,重定向,颜色设置为红色,一切正常
  6. 重新访问 www.example.com/?color=blue
  7. 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">
Run Code Online (Sandbox Code Playgroud)

对于它的价值 - 我也尝试过 <META HTTP-EQUIV="EXPIRES" CONTENT="-1">

IE9似乎忽略了所有这些指令.到目前为止,我在该浏览器中唯一一次成功是使用开发人员工具并确保将其手动设置为"始终从服务器刷新"

IE为什么忽略我的标题,我怎样才能强制它每次检查服务器?

Jim*_*Jim 7

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

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


joh*_*tok 3

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

Cache-Control: private, must-revalidate, max-age=0
Expires: Thu, 01 Jan 1970 00:00:00
Run Code Online (Sandbox Code Playgroud)