Максимальный возраст кэширования HTTP-кеша, должен-revalidate

У меня есть несколько запросов, связанных с Cache-Control.

Если я укажу Cache-Control max-age=3600, must-revalidate для статического файла html/js/images/css, с последним измененным заголовком, определенным в заголовке HTTP:

  • Доступен ли браузер/прокси-кеш (например, Squid/Akamai) до исходного сервера для проверки до истечения срока действия max-age? Или он будет обслуживать контент из кэша до истечения срока действия max-age?
  • После истечения срока действия max-age (истекает срок действия кэша), есть ли проверка If-Modified-Since или повторно загружена с исходного сервера без if-Modified-Since check?

Ответ 1

a) Если сервер включает этот заголовок:

Cache-Control "max-age=3600, must-revalidate"

он сообщает кэшам клиентов и кэшам прокси-сервера, что после того, как содержимое устарело (старше 3600 секунд), они должны обновиться на сервере происхождения, прежде чем они смогут обслуживать контент. Это должно быть поведение систем кэширования по умолчанию, но директива must-revalidate делает это требование однозначным.

b) Клиент должен повторить проверку. Он может revalidate с помощью заголовков If-Match или If-None-Match с ETag, или он может использовать заголовки If-Modified-Since или If-Unmodified-Since с датой.

Ответ 2

а. Посмотрите вкладку "Статистика" на на этой странице и посмотрите, что произойдет.

б. После истечения срока действия браузер проверяет на сервере, обновляется ли файл. Если нет, сервер ответит заголовком 304 Not Modified и ничего не будет загружено.

Вы можете проверить это поведение самостоятельно, посмотрев панель "Net" в Firebug или аналогичные инструменты. Просто заново введите URL-адрес в адресной строке и сравните количество HTTP-запросов с количеством запросов, когда ваш кеш пуст.