Я использую 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 обсуждается максимальный возраст здесь: 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 год кеширования, не продумали ее должным образом.
Во-первых, если посетителю предоставляется устаревший кэшированный файл, то почему он может дать какую-либо пользу, если он внезапно загрузит новую версию через год? Если у файла TTL 1 год, с функциональной точки зрения это, очевидно, означает, что файл вообще не предназначен для изменения.
Так зачем нужно больше 1 года?
1) Почему бы и нет? Он не имеет какой-либо цели сообщить браузеру посетителей: «Эй, этому файлу 1 год, было бы неплохо проверить, обновлялся ли он».
2) Услуги CDN. Большинство сетей доставки контента используют заголовок кеша, чтобы решить, как долго эффективно обслуживать файл с пограничного сервера. Если у вас есть годовой контроль кеша для файлов, он в какой-то момент начнет повторно запрашивать неизмененные файлы с исходного сервера, и пограничный кеш необходимо будет полностью повторно заполнить, что приведет к более медленной загрузке для клиента и ненужным звонки на происхождение.
Какой смысл иметь максимум 1 год? Какие браузеры задохнутся от набора суммы выше 31536000?