Когда я отключил 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, браузер, как правило, отдает ему приоритет над чем-либо еще.