Cache-Control

Что такое cache-control?

Cache-Control - это HTTP-заголовок, который определяет количество времени и способ htaccess кэширования файла:

cache-control-defined

В этой статье мы расскажем, как использовать Cache-Control. Большинство современных сайтов используют Cache-Control для управления кэшированием браузеров.

Основные принципы использования заголовка Cache-Control

Заголовок Cache-Control определяет количество времени, которое файл должен находиться в кэше, и метод кэширования:

Cache-Control: max-age=2592000, public

При обращении к файлу через браузер также извлекаются HTTP-заголовки. Когда заголовок Cache-Control включен, браузер будет его учитывать.

Если браузер видит, что файл должен храниться в течение пяти минут, он будет оставаться в кэше браузера в течение этого времени. И этот файл не должен обновляться при его повторном вызове:

application-cache-defined

В качестве примера можно привести логотип сайта. Если посетитель заходит на одну страниц ресурса, он загружает логотип. Если пользователь переходит на другую страницу, изображение логотипа не будет загружаться снова. Вместо этого будет использоваться кэширование через htaccess.

Что такое max-age?

max-age определяет время, в течение которого файл должен храниться в кэше.

Директива ответа max-age указывает, что ответ следует считать устаревшим после того, как проходит больше времени, чем заданное количество секунд.

Применение max-age

Часть заголовка max-age выглядит следующим образом:

max-age=2592000

Значение max-age задается в секундах.

Часто используемые значения для max-age:

  • Одна минута: max-age=60;
  • Один час: max-age=3600;
  • Один день: max-age=86400;
  • Одна неделя: max-age=604800;
  • Один месяц: max-age=2628000;
  • Один год: max-age=31536000.

При применении max-age для определения времени, которое файл должен храниться в кэше, следует учитывать тип этого файла и то, как он используется.

Директивы кэширования

Часть директивы кэширования в браузере htaccess приведенного выше заголовка выглядит следующим образом:

public

Директива приведенного выше заголовка Cache-Control объявляет "public". Это означает, что файл может кэшироваться публично (в отличие от случая, если бы это был private файл).

По умолчанию, большинство элементов считаются публично кэшируемыми (могут кэшироваться), но существуют случаи, когда такое поведение нежелательно: для конфиденциальных документов, для контента, предназначенного для конкретного пользователя, и т.д.

Мы рассмотрим три основные директивы Cache-Control:

  • public;
  • private;
  • no-store.

public

Директива "public" означает, что любой человек может осуществлять кэширование файлов htaccess на любом уровне.

Официальная спецификация определяет ее следующим образом:

Директива "public" указывает на то, что ответ может сохраняться где угодно в кэше, даже если он является некэшируемым или кэшируемым только в частном кэше.

Если вы хотите использовать кэширование для ускорения загрузки страницы, и этот ресурс не является частным, то нужно применить директиву public.

private

Директива private означает, что ресурс предназначается только для конкретного пользователя. В качестве примера можно привести страницу Twitter. Когда вы заходите в Twitter, вы видите одно, а другой человек, открывающий тот же URL-адрес, видит другое содержимое. Даже если информация на этой странице общедоступна, она «специфична» для конкретного человека.

Официальная спецификация определяет ее следующим образом:

Директива "private" указывает, что ответ предназначен для одного пользователя и не должен сохраняться в общедоступном кэше. Частный кэш может сохранять ответ и повторно использовать его для последующих запросов, даже если ответ является некэшируемым.

Если я зайду на Twitter.com, а затем обновлю страницу, некоторые элементы будут сохранены для меня с помощью кэширования и сжатие htaccess, а для вас нет. Если вы зайдете на Twitter.com и обновите страницу, некоторые элементы будут сохранены для вас в кэше, а для меня нет.

no-store

Директива no-store является самым категоричным запретом на кэширование. Официальная спецификация определяет ее следующим образом:

Директива "no-store" указывает на то, что в кэше не должны сохраняться части ни запроса, ни ответа. Эта директива применяется как для частного, так и для публичного кэша.

Еще раз отмечу, что само по себе это ничего не гарантирует.

Типы файлов

Два вопроса, которые должен задать себе веб-мастер:

  • Какие типы файлов нужно хранить с помощью кэширования файлов htaccess?
  • Как долго их нужно хранить в кэше?

Какие типы файлов должны храниться в кэше?

Я хотел бы отметить следующие типы файлов:

  • Изображения - PNG, JPG, GIF и другие. Изображения практически не меняются, поэтому они могут храниться в кэше длительное время (год);
  • CSS файлы - изменяются чаще, чем другие файлы, для их хранения может потребоваться более короткий период времени (неделя или месяц);
  • ICO (Favicon) - редко меняются (год);
  • JSкод JavaScript не изменяются слишком часто, поэтому для них можно задать средний период хранения (месяц).

Что следует учесть

Только вы можете определить, какие инструкции больше всего подходят для вашего сайта. Если вы собираетесь изменить какой-либо ресурс (например, файл CSS), и этот ресурс кэшируется в браузере htaccess, то стоит подумать над тем, чтобы изменить имя файла. Тогда обновленный файл CSS будет просмотрен всеми пользователями. Это называется URL-дактилоскопией.

Благодаря уникальному имени пользователи будут загружать новый (не кэшированный) вариант ресурса. Например, если ваш файл CSS имеет имя "main.css", вместо этого можно назвать его "main_1.css". В следующий раз, когда снова измените его, назовите "main_2.css". Это полезно для файлов, которые изменяются через определенные периоды времени.

Как добавить Cache-Control на сайт

Cache -Control добавляется к файлам точно так же, как любой другой заголовок на вашем сервере. В этой статье мы говорим о заголовке Cache-Control. Так как его добавить? Это зависит от вашего веб-сервера. Мы рассмотрим наиболее распространенные сценарии.

Файл .htaccess

Большинство использует для добавления заголовков файл .htaccess.

Пример кода файла .htaccess

Общий код для установки заголовка Cache-Control с помощью файла .htaccess:

Header set Cache-Control "max-age=2628000, public"

Но приведенный выше код не позволяет задавать различные инструкции кэширования сайта htaccess для различных типов файлов.

Чтобы применить разные заголовки Cache-Control к различным типам файлов, мы будем использовать:

# One month for most static assets
<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
Header set Cache-Control "max-age=2628000, public"
</filesMatch>

Приведенный выше код означает следующее:

"Если тип файла CSS, JPEG, JPG, PNG, GIF, JS или ICO, применить к нему следующий заголовок".

Предположим, что мы хотим изменить время кэширования изображений на один год, но оставить для файлов CSS и JS срок хранения один месяц.

Мы можем добавить в файл .htaccess следующий код:

# One year for image files
<filesMatch ".(jpg|jpeg|png|gif|ico)$">
Header set Cache-Control "max-age=31536000, public"
</filesMatch>
# One month for css and js
<filesMatch ".(css|js)$">
Header set Cache-Control "max-age=2628000, public"
</filesMatch>

Приведенный выше код состоит из двух блоков: один для изображений и один для CSS и JS-файлов. У нас может быть несколько блоков в файле .htaccess.

Конфигурация Apache http.conf

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

Используйте сочетание filesMatch и Header, чтобы создать отдельные инструкции для конкретных типов файлов (примеры кода для файла .htaccess подходят).

NGINX

Используя директивы expires, можно добавить инструкции кэширования в блоки сервера или местоположения:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}

Приведенный выше код задает инструкции кэширования для каждого из типов файлов, перечисленных в первой строке. Эти типы файлов могут быть добавлены или удалены. Также можно добавить несколько блоков для более гибкой настройки.

Litespeed

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

Если у вас нет лицензии, то необходимо будет использовать кэширование сайта htaccess. Приведенные выше инструкции для использования в .htaccess подходят также и для серверов Litespeed.

Перевод статьи «Cache-Control» был подготовлен дружной командой проекта Сайтостроение от А до Я.

19 июня 2016 в 11:41
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок