Назад | Перейти на главную страницу

Вопрос о максимальном возрасте для управления кешем

Я пытаюсь понять конфигурацию Cache-Control: max-age = 0 снизу:

Это фрагмент из HTTP Live Headers для статического изображения на нашей целевой странице после нажатия кнопки обновления:

If-Modified-Since: Sat, 23 Jul 2011 02:05:28 GMT
If-None-Match: "21246-eb05-4a8b30415ea00"
**Cache-Control: max-age=0**

HTTP/1.1 304 Not Modified
Date: Tue, 06 Sep 2011 20:59:29 GMT
Server: IBM_HTTP_Server
Connection: Keep-Alive
Keep-Alive: timeout=6
Etag: "21246-eb05-4a8b30415ea00"

Я вижу наш Cache-Control показывает max-age=0. Я нашел такое объяснение:

Управление кешем: max-age

Это HTTP 1.1 эквивалент более раннего заголовка Expires, доступного в HTTP 1.0. Он неявно сообщает браузеру, что он может кэшировать страницу, но должен повторно проверить его на сервере, если превышен максимальный возраст. Установка max-age на ноль гарантирует, что страница никогда не будет обслуживаться из кеша, но всегда будет повторно проверяться на сервере.

Если это верно, мы никогда не должны извлекать изображение из кеша браузера, если вы посмотрите на 304 выше не правильно? Что значит max-age=0 на самом деле означает?

У нас нет конфигураций кэширования, настроенных вручную в Apache httpd.conf, поэтому я предполагаю, что мы используем значения по умолчанию для кэширования / etags.

Ключ находится в последнем предложении опубликованного вами объяснения:

Установка max-age на ноль гарантирует, что страница никогда не будет обслуживаться из кеша, но всегда будет повторно проверяться на сервере.

В примере, который вы вставили, у клиента уже есть актив в кеше, и он может его обслуживать. Однако из-за максимального возраста клиент сначала свяжется с сервером и спросит, был ли он изменен. Из ответа сервера, который вы вставили, похоже, что актив не изменился, и сервер правильно «повторно проверяет» (304), что версия клиента верна (без фактической отправки актива по сети, поэтому есть некоторые выгода).

Если бы максимальный возраст был чем-то выше, браузер мог бы обслуживать актив из кеша, не запрашивая у сервера вообще ничего.