При использовании Cloudfront, как можно установить заголовок Expires относительно текущей даты? - PullRequest
8 голосов
/ 21 января 2011

Мы разрабатываем большой веб-сайт, и все наши изображения и ресурсы находятся в Amazon S3.Мы также используем Cloudfront для глобального распространения нашего Контента.Мы хотим, чтобы клиентский веб-браузер велел кэшировать наши файлы, потому что когда мы их изменяем, мы также меняем URL (Cloudfront не отражает изменение за 24 часа в другом месте).

Мыв настоящее время используют ETag, но это не является оптимальным, потому что Клиент все еще должен выполнить Запрос, чтобы проверить, изменился ли Ресурс.

Одним из решений будет заголовок Expires, но мы не нашли способ его установитьотносительно текущей даты, как это возможно в конфигурации Apache для S3, и мы не можем регулярно обновлять весь контент, потому что это довольно много.Поэтому нам понадобится параметр конфигурации, который устанавливает для заголовка Expires значение Date относительно текущей даты для всего содержимого.

Другим решением было бы установить Cache-Control: max-age на определенное значение.Это работает?Это принято основными браузерами?Я уничтожу некоторые алгоритмы кэширования с этим?Почему YSlow рекомендует устанавливать заголовок Expires, а не Cache-Control: max-age?

Любые другие Рекомендации?Мы сжимаем CSS и JS, используя спрайты, где это возможно, устанавливаем заголовки Expires и ETag, где это возможно, и скоро сжимаем наши изображения с помощью инструмента сжатия Yahoo и распаковываем вывод.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Мы сделали некоторые исследования о себе. Похоже, что заголовок Cache-Control помогает сообщить Cloudfront или прокси-серверу установить действительный заголовок Expires, но только иногда ...

В настоящее время мы пишем Cron Job для регулярного обновления всех заголовков в S3, потому что это одна вещь, которая работает точно. Похоже, другого пути нет. Я буду держать вас в курсе, если есть.

2 голосов
/ 26 сентября 2012

Зачем вам нужно, чтобы длительность кеша была относительно текущей даты?

Вы сказали:

"когда мы их изменим, мы также изменим URL"

Что для меня означает, что ваши ресурсы никогда не меняются. Почему бы тогда не установить заголовок Expires на дату очень далекого будущего (например, 01.01.2020)?

...