INTEGRITY Документация

Кеширование по коду статуса

Клиенты могут задавать время жизни кеша (TTL) на основе кода состояния ответа исходного веб-сервера. TTL кеша определяет время, в течение которого ресурс хранится в сети Cloudflare, прежде чем будет помечен как STALE или удаляется из кеша. Коды состояния возвращает источник ресурса.

Настройка TTL кеша на основе статуса ответа переопределяет поведение кеширования по умолчанию (стандартное кеширование) для статических файлов и переопределяет инструкции кеширования, отправленные веб-сервером источника. Чтобы кешировать нестатические ресурсы, задайте Настройка Cache Level на Cache Everything с помощью Cache Rule. Установка no-store Cache-Control или низкий TTL (используя max-age/s-maxage) увеличивает число запросов к исходным веб-серверам и снижает производительность.

Ограничения кеширования

Максимальный объём кеширования для клиентов на тарифах Free, Pro и Business составляет 512 МБ на файл, а для клиентов на тарифе Enterprise он составляет 5 ГБ на файл. Если вам нужно увеличить эти лимиты, обратитесь к своему менеджеру по работе с клиентами.

Edge TTL

By default, Cloudflare caches certain HTTP response codes with the following Edge Cache TTL when a cache-control директива или expires заголовок ответа отсутствует.

Код состояния HTTP TTL по умолчанию
200, 206, 301 120m
302, 303 20m
404, 410 3m

Все остальные коды состояния по умолчанию не кэшируются.

Настройка TTL кеша по статусу ответа через дашборд Cloudflare

Чтобы задать TTL кеша в зависимости от статуса ответа, создать Cache Rule для Cache TTL по коду статуса.

Настройка TTL кеша по статусу ответа через Cloudflare API

Запрос
curl --request PUT \
"https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/{ruleset_id}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "rules": [
    {
      "expression": "(http.host eq \"www.example.com\")",
      "description": "set cache TTL by response status",
      "action": "set_cache_settings",
      "action_parameters": {
        "cache": true,
        "edge_ttl": {
          "status_code_ttl": [
            {
              "status_code_range": {
                "to": 299
              },
              "value": 86400
            },
            {
              "status_code_range": {
                "from": 300,
                "to": 499
              },
              "value": 0  // no-cache
            },
            {
              "status_code_range": {
                "from": 500
              },
              "value": -1  // no-store
            }
          ],
          "mode": "respect_origin"
        }
      }
    }
  ]
}'

Синтаксис

Укажите объект JSON, содержащий коды статуса и соответствующие им значения TTL. Каждая пара ключ-значение в правиле cache TTL by status имеет следующий синтаксис:

Настройка TTL кеша по статусу ответа через Cloudflare Worker

cacheTtlByStatus параметр представляет собой версию cacheTtl функция, которая задаёт TTL кеша для кода состояния ответа на запрос (например, { "200-299": 86400, 404: 1, "500-599": 0 }).

Обработка TTL для кодов статуса 304 и 200

  1. Если TTL явно не задан для кода состояния 304, мы автоматически устанавливаем его равным TTL для кода состояния 200 (если пользователь задал его для 200).

  2. Если пользователь явно задаёт другой TTL для 304 чем для 200, произойдет следующее:

Например, если пользователь задаёт TTL в один час для статуса 200 и 0 секунд (кэшировать и всегда проверять повторно) для статуса 304, ресурс будет закеширован на 1 час. После истечения этого срока мы повторно проверяем ресурс у источника. Если источник возвращает 304, каждый последующий запрос будет запускать повторную проверку. Если источник продолжает возвращать 304, этот цикл будет повторяться.

Как правило, такое поведение нежелательно, если только у пользователя нет особого сценария использования. Поэтому пользователям следует убедиться, что TTL для 304 соответствует TTL для 200 если только им намеренно не требуется такое поведение.