在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中所期望的那样工作
如何让它服从?
由于
答案 0 :(得分:5)
问题很可能是您未在回复中设置max-age
或Expires
。
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]