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

Требуется ли HTTP-заголовок Last-Modified для кеширования браузера?

Когда я отключил Last-Modified заголовок в Apache (ETags также отключены), Firefox (4.01) не будет кэшировать файлы несмотря на о том, устанавливаю ли я будущее Expires заголовок или включите Cache-Control заголовок.

Так это Last-Modified (и / или ETag) заголовок, необходимый для кеширования браузера?

Из Вот:

Если в ответе нет валидатора (ETag или заголовок Last-Modified) и нет явной информации о его актуальности, он будет считаться некэшируемым.

... ну, если под «информацией о свежести» они подразумевают заголовок «Cache-Control» или «Expires», Firefox должен кэшировать без заголовка Last-Modified.

ИЗМЕНИТЬ ДОПОЛНИТЕЛЬНУЮ ИНФОРМАЦИЮ FIREFOX

Обратите внимание, что ни одна попытка создать 304 для любого файла PHP, обслуживаемого Apache 2.2 в Firefox 4.01, не будет успешной (перезагрузка, новое посещение и т. Д.) Без Last-Modified заголовок, независимо от того, какая комбинация установлена ​​для допустимого кеширования Cache-Control заголовок, Expires заголовок или оба заголовка.

foo.php: содержимое этого файла просто повторяет «Hello World».

HTTP/1.1 200 OK
Date: Mon, 06 Jun 2011 14:04:58 GMT
Server: Apache
Cache-Control: public, max-age=3600
Expires: Fri, 01 Jul 2011 21:23:55 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1594
Keep-Alive: timeout=10, max=500
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

РЕДАКТИРОВАТЬ ЕЩЕ БОЛЬШЕ СТРАННЫХ РЕЗУЛЬТАТОВ FIREFOX 4.01

Еще более странно, судя по тому, что я видел в Firefox 4.01, никакие формы заголовков управления кешем на стороне сервера (Expires и / или Cache-Control) не влияют на поведение кэширования Firefox. Firefox заботится только о свежести информации (Etag или Last-Modified).

Таким образом, если файл был изменен, Firefox перезагружает его независимо от заголовков Expires или Cache-Control. Если файл не содержит информации о свежести, Firefox перезагружает его, несмотря ни на что.

Если кто-то из своих наблюдений узнает иное, сообщите мне об этом.

ДРУГОЙ РЕДАКТИРОВАНИЕ

Из эта ссылка:

13.2.1 Срок действия, указанный сервером

Время истечения срока действия не может использоваться, чтобы заставить пользовательский агент обновить свое отображение или перезагрузить ресурс; его семантика применяется только к механизмам кэширования, и таким механизмам необходимо проверять статус истечения срока действия ресурса только при инициировании нового запроса для этого ресурса. См. Раздел 13.13 для объяснения разницы между механизмами кеширования и истории.

Остерегайтесь чтения случайных статей в сети (хотя материалы Марка Ноттингема обычно разумны). Окончательный источник всегда должен быть в RFC. И согласно RFC 2616 браузер должен кэшировать документ с заголовком Expires:, в котором указана временная метка в будущем или где предоставляются другие действительные инструкции кэширования при условии, что документ не возвращается в ответ на запрос POST.

Совершенно верно установить максимальный возраст без последнего изменения - и в спецификации это явно рассматривается.

Конечно, то, что вы описываете, кажется очень необычным и подразумевает, что FF4.01 никогда не будет кэшировать контент - я был бы удивлен, что он прошел проверки QC с таким вопиющим упущением. Можете ли вы предоставить подробную информацию о запросах и ответах, подтверждающих это (например, с liveheaders)?

В разных браузерах все зависит от того, что именно необходимо, но обычно я работаю с теорией, что если контент будет кэшироваться должным образом, ему потребуется как минимум Last-Modified. & Заголовок Etag, Expires - это плюс, но если у него есть etag, браузер, как правило, отдает ему приоритет над чем-либо еще.