Максимальное значение для заголовка управления кэшем в HTTP
Я использую Amazon S3 для обслуживания статических ресурсов для моего сайта. Я хочу, чтобы браузеры кэшировали эти активы как можно дольше. Какие заголовки метаданных я должен включать в свои активы
Cache-Control: max-age=???
3 ответа:
как правило, один год рекомендуется в качестве стандартного максимального значения. Смотрите RFC 2616:
, чтобы пометить ответ как "никогда не истекает," исходный сервер отправляет Срок действия истекает примерно через год с момента получения ответа отправленный. Серверы HTTP/1.1 не должны отправлять даты истечения срока действия более одного год в будущем.
хотя это относится и к старшим
expires
стандарт, имеет смысл обратиться кcache-control
в отсутствие каких-либо явных руководство по стандартам. Это так долго, как вам вообще нужно, и выбор любого произвольно более длинного значения может сломать некоторые пользовательские агенты. Итак:Cache-Control: max-age=31536000
подумайте о том, чтобы не хранить его "как можно дольше", а вместо этого устанавливать до тех пор, пока это разумно. Например, маловероятно, что вам нужно будет кэшировать его дольше, чем скажем 10 years...am я прав?
RFC обсуждает max-age здесь:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3
Эрик Лоуренс говорит, что до IE9 Internet Explorer будет рассматривать как устаревший любой ресурс с Cache-Control: max-age значение более 2147483648 (2^31) секунды, приблизительно 68 лет (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx).
другие агенты пользователей, конечно, будут отличаться, так что...попробуйте выбрать число, которое маловероятно (а не вероятно!), чтобы вызвать переполнение. Максимальный возраст более 31536000 (один год) имеет мало смысла, и неофициально это считается разумным максимальным значением.
люди, которые создали рекомендацию максимального кэширования 1 года, не продумали ее должным образом.
во-первых, если посетитель обслуживается устаревшим кэшированным файлом, то почему бы ему предоставить какую-либо выгоду, чтобы он внезапно загрузил новую версию через 1 год? Если файл имеет 1 год TTL, с функциональной точки зрения, это, очевидно, означает, что файл не предназначен для изменения вообще.
так зачем нужно больше, чем 1 год?
1) Почему бы и нет? это не сервер какой-либо цели, чтобы сказать посетителям браузера "Эй, этот файл 1 год, это может быть идея, чтобы проверить, если он был обновлен".
2) услуги CDN. большинство сетей доставки контента используют заголовок кэша, чтобы решить, как долго эффективно обслуживать файл с пограничного сервера. Если у вас есть 1 год управления кэшем для файлов, он в какой-то момент начнет повторно запрашивать неизмененные файлы из источника сервер и пограничный кэш должны быть полностью повторно заполнены, что приводит к более медленным нагрузкам для клиента и ненужным вызовам источника.
какой смысл иметь максимум 1 год? Какие браузеры будут задыхаться от суммы, установленной выше 31536000?