Добавление заголовка Expires или Cache-Control

В статье "Add an Expires or a Cache-Control Header" автор рекомендует использовать два вида заголовков для статических и динамических компонентов, чтобы установить срока хранения компонентов страниц в кеше и тем самым уменьшить количество HTTP-запросов, что влияет на время отклика
В этом правиле есть два момента:
  • Для статических компонентов: используйте принцип "срок действия неограничен", путём установки заголовка Expires на срок, истекающий в далёком будущем (far future Expires header)
  • Для динамических компонентов: используйте соответствующий заголовок Cache-Control, чтобы помочь браузеру с условными запросами

Дизайн Веб-страниц становится всё богаче и богаче, а это значит больше скриптов, таблиц стилей, изображений и Flash на странице. Первым посетителям вашей страницы, вероятно, придётся осуществить несколько HTTP-запросов, но используя заголовок Expires, Вы можете закешировать эти компоненты. Вы избежите ненужных HTTP-запросов при последующих просмотрах страницы. Заголовки Expires наиболее часто используются с изображениями, но они должны использоваться на всех компонентах, включая скрипты, таблицы стилей, и Flash-компоненты.

Браузеры (и прокси) используют кеш для уменьшения количества и размера HTTP-запросов, заставляя веб-страницы загружаться быстрее. Веб-сервер использует заголовок Expires в HTTP-ответах, чтобы сообщить клиенту сколько по времени может храниться в кеш конкретный компонент. Вот пример заголовка Expires, установленного на дату, истекающую в далёком будущем (far future Expires header ), который говорит браузеру, что этот ответ не устареет до 15 апреля 2010.

      Expires: Thu, 15 Apr 2010 20:00:00 GMT

Если вы пользуетесь сервером Apache, используйте директиву ExpiresDefault, чтобы установить дату истечения срока действия по отношению к текущей дате. В следующем примере дата истечения срока действия в директиве ExpiresDefault устанавлена на 10 лет со времени запроса.

      ExpiresDefault "access plus 10 years"

Имейте в виду, что если вы используете заголовок Expires, установленный на дату, истекающую в далёком будущем, то вам придется изменять имя файла при любых изменениях компонента. В Yahoo! мы часто делаем это частью процесса сборки: в номере версии заложено имя файла компонента, например, yahoo_2.0.6.js.

Использование заголовка Expires, установленного на дату, истекающую в далёком будущем, влияют на просмотры страниц, только после того, как пользователь уже посетил ваш сайт. Это никак не влияет на количество HTTP-запросов, когда пользователь посещает ваш сайт впервые, и кеш его браузера пуст. Поэтому увеличение производительности зависит от того, насколько часто пользователи посещают ваши страницы с заполненным кешом. ("заполненный кеш" уже содержит все компоненты страницы.) Мы рассмотрели этот момент в Yahoo! и оказалось, что 75-85 % просмотров страниц было совершено с заполненным кешем. Используя заголовок Expires, установленный на дату, истекающую в далёком будущем, Вы увеличиваете число компонентов, которые помещаются в кэш браузером и повторно используются при последующих просмотрах страниц, не используя при этом ни одного байта сверх интернет трафика пользователя.

 

Оригинал статьи на developer.yahoo.com

Перевод КОМТЕТ komtet.ru