2012-04-03 4 views
3

При кешировании страницы HTML с помощью must-revalidate это означает, что браузер должен проверять любое обновление, определенное Last-Modified или Etag. Однако проблема заключается в том, что до max-age браузер не будет связываться с сайтом, чтобы читать HTTP-заголовки (для анализа Last-Modified и Etag)?Как кэшировать HTML-страницу с обязательным подтверждением?

Как заставить браузер сделать короткое соединение для чтения (по крайней мере) HTTP-считывателей перед загрузкой страницы из кеша?

Я не понимаю использование must-revalidate! Не отвечает ли он за обновления до max-age? потому что после достижения max-age браузер будет читать с сайта и никогда не использовать локальный кеш.

ответ

8

Да, ваше понимание must-revalidate неправильно: это говорит о том, что кэш не может служить содержимое, если это несвежий (т.е. «истек»), но должны перепроверить до этого. Да, кеши (и браузеры) теоретически могут быть настроены на обслуживание страниц, даже если они устарели, хотя в стандарте говорится, что они должны предупреждать пользователя, если они это сделают.

Чтобы заставить браузер перепроверить страницу с сервером, самым простым решением является добавить max-age=0 в заголовок Cache-Control. Это позволит вашему браузеру сохранить копию страницы в кеше, но сравнить ее с версией сервера, отправив содержимое Last-Modified или ETag, как вы хотели.

Вместо этого вы могли бы добавить no-cache вместо этого, но поскольку пользователи ожидали, что это будет вести себя как no-store, браузеры постепенно обрабатывают их одинаково.

Для получения дополнительной информации о заголовках проверьте HTTP/1.1 RFC, section 14.9.

+1

очень полезная информация и практическое руководство, но я ничего не понял. Вы сказали, что «кеш не может служить этому контенту, когда он истек, но должен повторить проверку до этого». В любом случае, даже без 'must-revalidate', кеш НЕ будет обслуживаться, когда истек. – Googlebot

+2

Если вы перечитали окончание 14.9.3 в RFC выше, в нем упоминается, что не только кэши могут быть настроены для обслуживания устаревших ответов, клиенты (браузеры) могут использовать «max-stale», чтобы указать, что устаревший ответ прекрасен. Он также упоминает, что заголовок 'Warning' должен быть присоединен. –