IE缓存问题

时间:2011-03-25 11:04:57

标签: internet-explorer http

在IE中(至少8个,可能还有其余的):

我提出请求:

GET http://www.mydomain.com/ HTTP/1.1

服务器响应:

HTTP/1.1 200 OK
Cache-Control: private, must-revalidate
Last-Modified: Fri, 25 Mar 2011 10:52:34 GMT
Date: Fri, 25 Mar 2011 10:54:15 GMT

我再提出一个请求:

GET http://www.mydomain.com/ HTTP/1.1
If-Modified-Since: Fri, 25 Mar 2011 10:52:34 GMT

服务器响应:

HTTP/1.1 304 Not Modified
Cache-Control: private, must-revalidate
Last-Modified: Fri, 25 Mar 2011 10:52:34 GMT

然后我转到一些页面,说:

http://www.mydomain.com/somepage

上面有一个链接:

<a href="http://www.mydomain.com/">click me</a>

当我点击这个时,IE显示以前缓存的对此锚定URI的响应,甚至没有发出请求。

为什么不服从must-revalidate?这正如我在FireFox和Webkit中所期望的那样工作

如何让它服从?

由于

1 个答案:

答案 0 :(得分:5)

问题很可能是您未在回复中设置max-ageExpires

Cache-Control: must-revalidate告诉客户端,一旦此资源到期,他们必须针对原点重新验证它:

  

缓存必须每次都进行端到端的重新验证,如果仅基于源服务器的Expires或max-age值,缓存的响应是陈旧的


由于您没有在页面变得陈旧时声明,IE8依赖heuristics进行有根据的猜测。如果您希望IE重新验证页面时间,您需要添加适当的标头以保持到期时间短:

Cache-Control: private, must-revalidate, max-age=1
Expires: [immediately, or even a date in the past]