Подтвердить что ты не робот

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

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

Cache-Control: max-age=???
4b9b3361

Ответ 1

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

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

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

Cache-Control: max-age=31536000

Ответ 2

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

В RFC обсуждается max-age здесь: 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 (один год) имеет мало смысла, и неофициально это считается разумным максимальным значением.

Ответ 3

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

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

Итак, для чего нужно больше 1 года?

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

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

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