← Cloudflare Cache / cache / how-to
Кеширование по коду статуса
Клиенты могут задавать время жизни кеша (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 имеет следующий синтаксис:
status_code: Целое число, например 200 или 500.status_codeсоответствует точному коду статуса от веб-сервера источника. Допустимые коды статуса находятся в диапазоне от 100 до 999.status_code_range: Целочисленные значения дляfromиto.status_code_rangeсоответствует любому коду статуса от веб-сервера источника в пределах указанного диапазона.value: Целое число, определяющее срок действия ресурса в секундах, или одна из следующих строк:no-store(эквивалентно-1),no-cache(эквивалентно0).
Настройка TTL кеша по статусу ответа через Cloudflare Worker
cacheTtlByStatus параметр представляет собой версию cacheTtl функция, которая задаёт TTL кеша для кода состояния ответа на запрос (например, { "200-299": 86400, 404: 1, "500-599": 0 }).
Обработка TTL для кодов статуса 304 и 200
-
Если TTL явно не задан для кода состояния
304, мы автоматически устанавливаем его равным TTL для кода состояния200(если пользователь задал его для200). -
Если пользователь явно задаёт другой TTL для
304чем для200, произойдет следующее:
- Когда
200ответ получен, ресурс кешируется с TTL, заданным для статуса200. - Когда срок действия ресурса истекает и мы повторно проверяем его у источника, если источник возвращает
304, TTL кеша обновляется до значения, установленного для304.
Например, если пользователь задаёт TTL в один час для статуса 200 и 0 секунд (кэшировать и всегда проверять повторно) для статуса 304, ресурс будет закеширован на 1 час. После истечения этого срока мы повторно проверяем ресурс у источника. Если источник возвращает 304, каждый последующий запрос будет запускать повторную проверку. Если источник продолжает возвращать 304, этот цикл будет повторяться.
Как правило, такое поведение нежелательно, если только у пользователя нет особого сценария использования. Поэтому пользователям следует убедиться, что TTL для 304 соответствует TTL для 200 если только им намеренно не требуется такое поведение.