开发者

IE caching problem

开发者 https://www.devze.com 2023-02-19 22:41 出处:网络
In IE (8 at least, probably the rest too): I make a request: GET http://www.mydomain.com/ HTTP/1.1 the server responds with:

In IE (8 at least, probably the rest too):

I make a request:

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

the server responds with:

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

I make another request:

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

the server responds with:

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

I then goto some page, say:

http://www.mydomain.com/somepage

which has a link on it:

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

When I click this, IE displays the previously cached response for this the anchored URI, without even making a request.

Why is it not obeying must-revalidate? This works as I'd expect in FireFox and Webkit

How do I make it obey it?

开发者_运维百科Thanks


The problem is most likely that you haven't set a max-age or Expires in the response.

Cache-Control: must-revalidate tells clients that once this resource expires, they must revalidate it against the origin:

the cache MUST do an end-to-end revalidation every time, if, based solely on the origin server's Expires or max-age value, the cached response is stale


Since you don't declare when the page becomes stale, IE8 relies on heuristics to make an educated guess. If you want IE to revalidate the page every time, you need to add appropriate headers to keep the expiry short:

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

精彩评论

暂无评论...
验证码 换一张
取 消