Я использую Amazon S3 для обслуживания статических ресурсов для моего сайта. Я хочу, чтобы браузеры кэшировали эти активы как можно дольше. Какие заголовки метаданных следует включать с моими активами.
Cache-Control: max-age=???
Я использую Amazon S3 для обслуживания статических ресурсов для моего сайта. Я хочу, чтобы браузеры кэшировали эти активы как можно дольше. Какие заголовки метаданных следует включать с моими активами.
Cache-Control: max-age=???
Обычно один год рекомендуется в качестве стандартного максимального значения. См. RFC 2616:
Чтобы отметить ответ как "никогда не истекает", сервер происхождения отправляет Срок действия истекает примерно один год с момента ответа послал. Серверы HTTP/1.1 НЕ ДОЛЖНЫ отправлять даты истечения срока действия более одного год в будущем.
Хотя это относится и к более старому стандарту expires
, имеет смысл обратиться к cache-control
тоже в отсутствие каких-либо явных указаний по стандартам. Это до тех пор, пока вам вообще необходимо, и выбор любого произвольно более длинного значения может привести к поломке некоторых пользовательских агентов. Итак:
Cache-Control: max-age=31536000
Подумайте о том, чтобы не хранить его "как можно дольше", а вместо этого урегулировать до тех пор, пока это разумно. Например, маловероятно, что вам нужно будет кэшировать его дольше, чем сказать 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 (один год) имеет мало смысла, и неофициально это считается разумным максимальным значением.
Люди, которые создали рекомендацию о максимальном кешировании на 1 год, не думали об этом правильно.
Прежде всего, если посетителю будет подан устаревший кешированный файл, то почему бы ему дать какую-либо выгоду, чтобы он внезапно загрузил новую версию через 1 год? Если файл имеет 1 год TTL, с функциональной точки зрения, это означает, что файл не предназначен для изменения вообще.
Итак, для чего нужно больше 1 года?
1) Почему бы и нет? Не нужно указывать браузеру посетителей "эй, этот файл 1 год, может быть, стоит проверить, обновлен ли он".
2) Службы CDN.. Большинство сетей доставки контента используют заголовок кеша, чтобы решить, как долго эффективно обслуживать файл с пограничного сервера. Если у вас есть 1 год управления кешем для файлов, он в какой-то момент начнет повторно запрашивать неизменяемые файлы с исходного сервера, а кэш-кеш должен быть полностью переполнен, что приведет к более медленным нагрузкам для клиента и ненужным вызывает начало координат.
Какой смысл иметь максимум 1 год? Какие браузеры будут дросселировать на сумму, превышающую 31536000?