IE кеширование - PullRequest
       5

IE кеширование

3 голосов
/ 25 марта 2011

В 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 Ответ

5 голосов
/ 25 марта 2011

Скорее всего, проблема в том, что вы не установили max-age или Expires в ответе.

Cache-Control: must-revalidate сообщает клиентам, что после истечения срока действия этого ресурса они должны повторно проверить его по источнику:

кэш ДОЛЖЕН выполнять сквозную повторную проверку каждый раз, если, основываясь только на значении Expires или max-age исходного сервера, кэшированный ответ устарел


Поскольку вы не объявляете, когда страница устареет, IE8 полагается на эвристику , чтобы сделать обоснованное предположение. Если вы хотите, чтобы IE повторно проверял страницу каждый раз, вам нужно добавить соответствующие заголовки, чтобы сократить срок действия:

Cache-Control: private, must-revalidate, max-age=1
Expires: [immediately, or even a date in the past]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...