Максимальное значение для заголовка управления кэшем в HTTP


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

Cache-Control: max-age=???
3 53

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?