Максимальное значение для заголовка элемента управления кэшем в HTTP - PullRequest
64 голосов
/ 16 августа 2011

Я использую Amazon S3 для обслуживания статических ресурсов для моего сайта. Я хочу, чтобы браузеры кэшировали эти ресурсы как можно дольше. Какие заголовки метаданных мне следует включить в мои активы

Cache-Control: max-age=???

Ответы [ 3 ]

93 голосов
/ 08 августа 2014

Обычно в качестве стандартного максимального значения рекомендуется один год.См. RFC 2616 :

Чтобы пометить ответ как «никогда не истекает», сервер отправления отправляет дату истечения срока действия примерно через год с момента отправки ответа.Серверы HTTP / 1.1 НЕ ДОЛЖНЫ отправлять даты Expires в будущем более одного года.

Хотя это относится к более старому стандарту expires, имеет смысл применять и к cache-control в отсутствиелюбого четкого руководства по стандартам.Это так долго, как вам обычно нужно, и любое произвольно более длинное значение может сломать некоторых пользовательских агентов.Итак:

Cache-Control: max-age=31536000
20 голосов
/ 16 августа 2011

Подумайте не хранить его «как можно дольше», а вместо того, чтобы хранить его как можно дольше. Например, вряд ли вам понадобится кэшировать его дольше, чем, скажем, 10 лет ... я прав?

RFC обсуждает максимальный возраст здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

Эрик Лоуренс говорит, что до IE9 Internet Explorer рассматривал бы как устаревший любой ресурс с Cache-Control: максимальное значение-возраст свыше 2147483648 (2 ^ 31) секунд, примерно 68 лет (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx).

)

Другие пользовательские агенты, конечно, будут отличаться, поэтому ... попробуйте выбрать число, которое вряд ли (а не вероятно!) Вызовет переполнение. Максимальный возраст, превышающий 31536000 (один год), не имеет большого смысла, и неофициально это считается разумным максимальным значением.

1 голос
/ 05 марта 2015

Люди, которые создали рекомендацию о максимальном сроке хранения в 1 год, не продумали ее должным образом.

Прежде всего, если посетителю обслуживается устаревший кешированный файл, то почему он дает какую-либо выгоду, если он внезапно загружает новую версию через 1 год? Если файл имеет годичный TTL, с функциональной точки зрения это, очевидно, означает, что файл не предназначен для изменения вообще.

Так зачем нужно больше года?

1) Почему бы и нет? Нет никакой необходимости сообщать браузеру посетителей: «Эй, этому файлу 1 год, возможно, стоит проверить, обновился ли он».

2) Службы CDN. Большинство сетей доставки контента используют заголовок кэша, чтобы решить, как долго обслуживать файл с пограничного сервера. Если у вас есть 1-летний контроль кэша для файлов, он в какой-то момент начнет повторный запрос неизмененных файлов с исходного сервера, и пограничный кэш потребуется полностью заполнить, что приведет к более медленной загрузке для клиента и ненужным звонки на источник.

Какой смысл иметь максимум 1 год? Какие браузеры будут подавляться на сумму, установленную выше 31536000?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...