Как настроить cache control

Cache-Control

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

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

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

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

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

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

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

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

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

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

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

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

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

Значение 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 приведенного выше заголовка выглядит следующим образом:

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

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

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

public

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

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

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

private

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

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

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

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 :

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

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

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

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

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

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

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

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

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

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

NGINX

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

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

Litespeed

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

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

Источник

Кэширование статики и cache-control

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

Управление тем, какие файлы следует кэшировать осуществляется с помощью HTTP заголовков Cache-control и Expires. Сервер отправляет такой заголовок вместе с ответом, указывая браузеру стоит или нет сохранить этот файл в локальное хранилище.

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

Cache-control

Для того, чтобы управлять кэшированием в браузере используется HTTP заголовок Cache-control. Его необходимо передавать со всеми файлами, которые нужно кэшировать. Он имеет следующий формат:

Cache-Control: private, max-age=0, no-cache

  • private означает, кто кэширование будет работать только на браузере пользователя. Вместо этого Вы можете использовать инструкцию public. Это разрешает кэширование на публичных прокси-серверах (такие часто есть в компаниях).
  • no-cache означает, что данный запрос нельзя кэшировать.
  • max-age это время, на которое будет закэширован результат. Устанавливается в секундах.

Обычно этого заголовка достаточно для того, чтобы все заработало:

Cache-Control: private, max-age=60

закэширует результат запроса в браузере на 60 секунд

Cache-Control: private, max-age=0, no-cache

запретит кэширование запроса

Expires

Дополнительный заголовок HTTP Expires указывает дату и время, когда браузер должен обновить кэш:

Expires: Thu, 31 Dec 2037 23:55:55 GMT

Браузер отправит повторный запрос аж в 2037 году, до этого времени он будет использовать кэш

Этот заголовок следует использовать вместе с Cache-Control.

Заголовок Vary позволяет установить дополнительные правила для кэширования запросов:

Браузер будет знать, что контент может отличаться в зависимости от версии сайта (например, мобильной и настольной)

Читайте также:  Как настроить геймпад для эмулятора epsxe

Что кэшировать

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

  • Картинки
  • CSS
  • Javascript
  • Загружаемые файлы (архивы, документы и т.п.)

Использование в приложении

В приложении заголовки Cache-Control обычно не используются, т.к. приложения генерируют динамический контент. Если же у вас редко изменяется сайт, вы можете добавить кэширование, чтобы снизить количество запросов на сервер. Например, в PHP:

Включим кэш на 1 час

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

Использование на Web сервере

Заголовки для картинок и статических файлов (JS/CSS) нужно устанавливать на Web сервере.

Nginx

В Nginx кэширование включается инструкцией expires:

Включит кэш на бесконечный срок для файлов с перечисленными расширениями

Apache

В Apache кэширование включается модулем mod_expires и выглядит так:

Включает кэш для файлов на 1 месяц

Изменение файлов

Javascript и CSS файлы обычно изменяются. Но заранее невозможно определить когда нужно будет внести изменение. Можно кэшировать такие файлы на короткое время (например минуту), но это не позволит использовать все преимущества Cache-Control.

Браузер хранит в кэше файлы соответственно их адресам URL. Если Мы добавим GET параметр в путь, путь изменится и браузер заново запросит файл. Что нам и нужно. При каждом обновлении CSS и Javascript файлов следует добавлять в GET параметр новое значение:

Лучше всего использовать последовательные числа (версии), и при каждом изменении просто увеличивать их на единицу.

Самое важное

Клиентское кэширование может повысить скорость работы Вашего сайта в несколько раз. Обязательно используйте эту возможность. Проверить правильность использование Cache-control любой страницы можно с помощью инструмента Cache-control Checker.

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

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .

Как перезапустить nginx после обновления конфигурации

Включение и использование log-файлов для проверки работы Nginx

Уменьшение размера картинок при сохранении качества

301 redirect в Nginx’e

Что такое Etag и как его настроить в Nginx

Как исправить ошибку 405 Not Allowed в Nginx

Причины и методы исправления ошибки Gateway Timeout, Nginx

Как настроить Nginx на максимальную эффективность

Где находится nginx.conf и пример настроек

Как использовать try_files в настройках Nginx’a

Основы оптимизации работы Web сервера

Работа приложения с несколькими бэкендами при помощи Nginx

Архитектурные принципы высоконагруженных приложений

Как пофиксить ошибку «110: connection timed out» while reading response header from upstream

Как исправить ошибку Primary script unknown в Nginx

Причины возникновения ошибки Ошибка 502 bad gateway в Nginx и методы исправления

Использование Nginx, как кэширующего сервера

Как решить ошибку upstream sent too big header while reading response header from upstream в Nginx

Примеры применения Javascript в Nginx’e

Как улучшить время получения первого байта и отзывчивость веб-сервера

Ошибка HTTP 413 (Request Entity Too Large Error) означает, что клиент отправил слишком большой запрос на сервер.

Источник

Как настроить заголовки Cache-Control в NGINX — CloudSavvy IT

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

Как работает кэширование?

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

Браузер пользователя является клиентским кешем. Однако многие крупные сайты также будут использовать сеть доставки контента или CDN. CDN находится перед вашим веб-сервером и кэширует ваши страницы на стороне сервера, обычно на нескольких пограничных серверах, расположенных по всему миру. Это повышает задержку доступа, производительность и значительно снижает нагрузку на ваш веб-сервер. Если вы хотите узнать больше о CDN, вы можете прочитать наше руководство по ним здесь.

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

Читайте также:  Если кто то настроил начальника против вас

Некоторые страницы должны никогда быть кэшированным. Все, что требует входа пользователя, не должно кэшироваться CDN, иначе вы рискуете отображение личной информации одного пользователя другим, Вы все еще можете кэшировать эти виды страниц только на стороне браузера (установив Cache-Control в private ). Как правило, если страница будет одинаковой для всех пользователей, как и ваша домашняя страница, вы можете ее кэшировать. Статические ресурсы, такие как CSS и изображения, обычно могут кэшироваться, часто гораздо дольше.

Вам также нужно убедиться, что вы устанавливаете разумные значения времени жизни (TTL) для каждого ресурса. TTL контролирует, как долго объект будет оставаться в кэше, прежде чем будет признан недействительным, предлагая пользователю запросить новый объект. Компромисс здесь между долгим временем кэширования и быстрым обновлением. Вы не хотите кэшировать свою домашнюю страницу в течение всего года, потому что вы можете что-то изменить во вторник. Установка максимального возраста для домашней страницы в несколько минут — это достаточно долго, чтобы покрыть немедленные перезагрузки, и достаточно быстро, чтобы обеспечить быстрое распространение обновлений. Тем не менее, для статических ресурсов, таких как изображения, они могут никогда не измениться, и вы должны хорошо установить высокие значения TTL, даже до двух лет.

Вы всегда можете использовать версионные имена файлов для запуска перезагрузки кэша. Если вы выпускаете новую версию таблицы стилей CSS, вы можете назвать ее styles-1.0.1.css и браузер пользователя (и любые CDN перед ним) увидит его как новый файл, который необходимо повторно загрузить. Кроме того, для некоторых CDN вы можете выполнить ручную аннулирование, чтобы очистить существующий кеш без изменения имен файлов.

Как использовать Cache-Control в NGINX

Cache-Control имеет несколько вариантов:

  • public — Может кэшироваться кем угодно, включая браузеры и CDN. Используйте это для большинства статических объектов.
  • private — Содержит конфиденциальные данные, которые не могут быть кэшированы CDN или обратными прокси. Браузер пользователя может кэшировать его локально. Используйте это для большинства аутентифицированных страниц.
  • no-cache — Несмотря на название, он не отключает кеширование. Браузер может по-прежнему кэшировать ответ на производительность, но должен проверить наличие обновлений на исходном сервере перед его использованием. Используйте это, если вы хотите, чтобы пользователь проходил повторную проверку каждый раз
  • no-store — Отключает кеширование полностью. Используйте это только для конфиденциальных данных, которые не следует отправлять дважды.

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

  • -1 , или off , который отключит кеширование, а не модифицирует существующие заголовки
  • epoch установите нулевое время Unix, что явным образом отключит кэширование и очистит все кэши (полезно, если вы используете NGINX в качестве обратного прокси-сервера)
  • max , который истекает, когда вселенная заканчивается, 31 декабря 2037 г.
  • 30s на секунды
  • 1m , на минуты
  • 24h , часами
  • 3d , несколько дней
  • 1M , месяцами
  • 2y , годами

Кроме того, вы можете добавить no-transform директива, которая запрещает любые преобразования, которые могут быть сделаны к ресурсу. Например, некоторые CDN сжимают образы, чтобы уменьшить пропускную способность. Эта директива отключает такое поведение.

Для NGINX вы можете изменить заголовки Cache-Control следующими директивами:

Первая строка устанавливает максимальный возраст 1 год, а вторая устанавливает public и no-transform настройки кеширования. Вы можете добавить это к server Блок для применения всего сайта, но лучший способ — сопоставить расширения файлов с блоком местоположения, чтобы установить разные значения в зависимости от расширения файла:

Этот блок местоположения использует совпадение регулярного выражения, обозначенное

, Это полезно для применения общих настроек для типа контента. Если вы хотите сделать исключения для определенных местоположений, вы можете использовать обычный блок местоположений, который будет иметь приоритет над соответствием регулярному выражению.

Вы также можете использовать = модификатор, который точно соответствует путям, и будет иметь приоритет над соответствием регулярному выражению и стандартным блоком местоположения.

Используйте суррогатное управление для изменения поведения CDN

Хотя вы можете отключить кеширование CDN и по-прежнему использовать кеширование браузера с помощью Cache-Control: private лучше иметь прямой контроль над этим. Большинство CDN будут уважать Surrogate-Control заголовок, который функционирует точно так же, как Cache-Control , кроме предназначенных только для CDN. Таким образом, вы можете сказать быстро сделать одно, а пользователь — другое.

В NGINX вам придется установить этот заголовок вручную и установить max-age значение вместо использования NGINX expires директивы.

Вы определенно захотите проверить с вашим CDN, чтобы убедиться, что это работает — Surrogate-Control является довольно новым и не универсальным.

Источник

Оцените статью