Кеширование статического контента

Что за услуга, какую пользу несёт для вашего ресурса и как её подключить.

Подключается по запросу и доступно только для схемы интеграции Proxy.

Что это

Кеширование — механизм, с помощью которого система защиты сохраняет копии ваших файлов и затем отдаёт их пользователям, не обращаясь к серверу-источнику.

Какие файлы можно кешировать

Любые. Обычно кешируют статический контент — файлы, которые редко меняются и одинаково отдаются всем пользователям. Например, иконки, CSS-стили, JavaScript-файлы, изображения или шрифты.

Какую пользу несёт

Кеширование снижает нагрузку на сервер-источник. Часть запросов наша защита обработает самостоятельно — ваш сервер получит меньше однотипных обращений и будет работать стабильнее при высоком трафике.

Кеширование ускоряет загрузку ресурса для пользователей. Если файл уже есть в кеше, защита отдаст его без обращения к серверу-источнику. Путь запроса становится короче, а ответ приходит быстрее.

Обработка запросов с кешированием и без него

Как работает

На своей стороне вы делаете настройку: для файлов, которые нужно кешировать, добавляете заголовок Cache-Control. В нём прописываете директивы — нужные параметры кеширования. Дальше всё работает так:

  1. Пользователи отправляют запросы к вашему ресурсу.

  2. Наша система фильтрует запросы и передаёт легитимные на ваш сервер-источник.

  3. Сервер-источник отправляет ответы.

  4. Наша система передаёт ответы пользователям.

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

  5. Пользователи отправляют новые запросы к вашему ресурсу.

  6. Наша система блокирует нелегитимные запросы. А с легитимными поступает так:

    • если запрошен файл, который сохранён в кеше, отдаёт файл из кеша;

    • если запрошен файл не из кеша, передаёт этот запрос дальше на ваш сервер-источник.

Когда срок хранения файла истечёт, защита удалит его из кеша. Когда этот файл запросят снова, защита заберёт его с сервера-источника, сохранит новую копию в кеше и отдаст пользователю.

Как подключить

  1. Отправьте запрос на подключение кеширования персональному менеджеру или в техподдержку.

  2. Поддержка на нашей стороне включит кеширование:

    • Подготовит для вашего ресурса кеш-зону — выделенное место размером 100 МБ на наших серверах.

    • Настроит кеширование: в кеш-зоне будут сохраняться ваши файлы, у которых есть заголовок Cache-Control с нужными директивами.

    • Настроит добавление служебного заголовка X-Verdict-Cache-Status во все ответы, которые защита возвращает пользователям. Этот заголовок нужен, чтобы вы могли отслеживать работу кеширования.

  3. Настройте на вашей стороне заголовок Cache-Control для файлов, которые нужно кешировать. В нём укажите нужные директивы.

Cache-Control — общий HTTP-заголовок, который управляет кешированием. Он определяет, как файлы вашего ресурса должны храниться в публичном кеше (в хранилищах систем, которые стоят между пользователем и вашим сервером — например, нашей системы защиты) и в приватном кеше (локальном хранилище в браузере пользователя).

Директива Что означает Что будет, если указать директиву

public

Файл можно хранить и в общем кеше, и в приватном кеше.

Наша защита сохранит копию файла в кеше и будет отдавать её пользователям.

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

private

Файл можно хранить только в приватном кеше.

Наша защита не сохранит файл в кеш и будет каждый раз обращаться за ним на сервер-источник.

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

no-cache

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

Наша защита не сохранит файл в кеш и будет каждый раз обращаться за ним на сервер-источник.

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

Как проходит проверка?

Браузер:

  1. Отправит проверочный запрос.

  2. Получит от сервера ответ.

  3. Если копия актуальна, использует её. Если нет, запросит у сервера новую версию файла и сохранит её в кеше.

Форма проверки определяется валидаторами, которые сервер положил в первоначальный ответ. Например, сервер мог указать уникальный идентификатор версии ресурса через ETag:

HTTP/1.1 200 OK
Cache-Control: no-cache
ETag: "version-42"

Тогда перед использованием копии файла из кеша браузер сначала проверит ETag:

GET /page.html HTTP/1.1
If-None-Match: "version-42"

Если он не изменился, всё в порядке, файл можно использовать. Если поменялся, браузер запросит файл заново.

no-store

Полный запрет на сохранение файла в каких-либо кешах.

Ни наша защита, ни браузер пользователя не будут сохранять файл в кеше.

max-age=<seconds>

Срок хранения файла в каком-либо кеше. Например, max-age=3600 — файл можно хранить в кеше 1 час.

Если копия файла была сохранена в каком-либо кеше (на стороне нашей защиты или браузера пользователя), она удалится оттуда через указанное время.

Максимальный срок хранения копии на нашей стороне — 24 часа. Если в max-age указать значение больше, защита всё равно обновит копию через сутки.

s-maxage=<seconds>

Срок хранения файла в общем кеше. Браузер пользователя эту директиву не учитывает.

Если копия файла была сохранена в кеше нашей защиты, она удалится оттуда через указанное время.

Если одновременно указать и max-age, и s-maxage, защита будет использовать s-maxage.

Примеры настройки Cache-Control

Пример 1. Включить кеширование для файла

Пример заголовка: Cache-Control: public, max-age=3600.

Такой заголовок разрешает хранить файл в кеше 1 час.

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

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

Пример 2. Задать отдельный срок хранения в общем кеше

Пример заголовка: Cache-Control: public, max-age=3600, s-maxage=86400.

И наша система, и браузер пользователя сохранят этот файл в своих кешах. Но срок хранения будет отличаться: для браузера задан 1 час, для системы защиты — 24 часа.

Пример 3. Отключить кеширование для файла

Пример заголовка: Cache-Control: no-store.

Такой заголовок запрещает сохранять файл в каких-либо кешах. Используйте его для файлов, которые не нужно кешировать.

Как проверить работу кеша

  1. Откройте страницу ресурса в браузере.

  2. Откройте DevTools.

  3. Перейдите на вкладку Network и снимите галочку Disable cache.

  4. Обновите страницу.

  5. Откройте запрос к файлу и в заголовках ответа найдите X-Verdict-Cache-Status. Возможные значения заголовка:

    • HIT — файл отдан из кеша, кеширование сработало;

    • MISS — файла не было в кеше, защита обратилась к серверу-источнику.

Если файл можно кешировать и Cache-Control настроен корректно, при первом запросе файла отобразится MISS, а при повторном — HIT.

Если при повторном запросе всё равно видите MISS, проверьте значение заголовка Cache-Control на вашей стороне: убедитесь, что для файла разрешено кеширование в общем кеше и задан срок хранения.