← Cloudflare Cache / cache / troubleshooting
Анализ некешируемых ответов
Если URL-адрес, который должен был кешироваться, каждый раз обслуживается с источника, cf-cache-status заголовок ответа показывает, какое решение о кешировании принял Cloudflare. Запросите URL-адрес, проверьте заголовок и перейдите к разделу, соответствующему увиденному значению:
DYNAMICCloudflare определил, что запрос не подлежал кэшированию, ещё до обращения к кэшу. См. DYNAMIC: запрос не подлежит кешированию.BYPASSCloudflare был готов закэшировать ответ, но ответ источника или конфигурация этому помешали. См. BYPASS: ответ исходного сервера не подлежит кэшированию.MISSпри нескольких последовательных запросах от одного и того же клиента: ответ можно кешировать, но кеш продолжает давать промах. См. Повторный MISS: подлежит кешированию, но отсутствует в кеше.
Для любого другого статуса см. Кеширование ответов с полным списком.
Прежде чем начать
Недавний Полная очистка, очистка по URL, очистка по префиксу, очистка по тегу, или очистка по имени хоста очищает кеш. Следующий запрос в каждом дата-центре заново наполняет кеш и возвращает MISS прежде чем последующие запросы начнут возвращать HIT. Если очистка кеша выполнялась недавно, подождите, пока кеш заново наполнится, прежде чем продолжать.
DYNAMIC: запрос не подлежит кешированию
Cloudflare принял решение «не кешировать» ещё на этапе запроса, до обращения к кешу. Частые причины:
- Расширение файла отсутствует в расширения файлов, кешируемые по умолчанию список например,
.htmlили ответ JSON API, и ни одно правило не включает для него кеширование. Добавьте Cache Rule с Подлежит кешированию имеет значение Да. - Правило указывает Cloudflare обходить кеш. Проверьте, есть ли Cache Rule с Bypass cache настройку либо устаревшую
Cache Level: BypassConfiguration Rule или Page Rule, совпадает с URL. Используйте Трассировка правила чтобы убедиться, какие правила применяются. - Метод запроса не является
GETилиHEAD. Cloudflare кэширует только эти два метода. - Development Mode включен для зоны. Development Mode приостанавливает кэширование на три часа и возвращает
DYNAMICдля каждого ответа.
Как только запрос становится подходящим, последующие ответы отражают решение, принятое во время обработки запроса (HIT, MISS, BYPASS, и так далее).
BYPASS: ответ исходного сервера не подлежит кэшированию
Запрос подходил для кеширования, но ответ источника или настройки конфигурации помешали Cloudflare сохранить его. Наиболее частые причины:
-
Ответ превышает лимит размера кешируемого контента для вашего плана. Разделите объект на более мелкие ресурсы или перейдите на план с более высоким лимитом. R2 является альтернативой хранилищу на источнике: он не увеличивает предельный размер объекта, кэшируемого CDN.
-
Источник вернул
no-storeили безprivateвCloudflare-CDN-Cache-ControlилиCDN-Cache-Controlзаголовок. Cloudflare оценивает эти заголовки передCache-Control, в порядке приоритетаCloudflare-CDN-Cache-Control>CDN-Cache-Control>Cache-Control. Источник, возвращающийCache-Control: public, max-age=3600вместе сCDN-Cache-Control: no-storeприводит кBYPASS. Cloudflare не передаётCloudflare-CDN-Cache-Controlклиенту, поэтому он не виден в ответе. Если вы видитеBYPASSбезCDN-Cache-Controlзаголовок, проверьте, что именно отправил источник, либо отключите заголовок на источнике и повторите тест. Cache Rule с Edge Cache TTL настройка, игнорирующая cache-control источника, переопределяет обе директивы. См. CDN-Cache-Control с правилами приоритета. -
no-cache,max-age=0, илиs-maxage=0вCloudflare-CDN-Cache-ControlилиCDN-Cache-Controlне создаютBYPASS. Они приводят кMISSпри первом запросе, тогдаREVALIDATEDилиEXPIREDпри последующих запросах. -
Источник вернул
Cache-Control: no-storeили безprivate. Эти директивы блокируют кэширование либо в Origin Cache Control режим по умолчанию. Два исключения:Cache-Control: private="<header>"с именами полей остаётся кэшируемым: Cloudflare удаляет только указанные заголовки. А Cache Rule с Edge TTL, который игнорирует cache-control источника (Edge TTL → Ignore cache-control header and use this TTL или Status code TTL) имеет приоритет над обеими директивами, поэтому ответ сno-storeплюс на это время действует настройка Edge TTL, и ресурс кешируется. -
Источник вернул
Cache-Control: no-cache,max-age=0, илиs-maxage=0, а также Origin Cache Control отключён (значение по умолчанию для плана Enterprise). При включенном Origin Cache Control (значение по умолчанию для планов Free, Pro и Business) эти директивы заставляют Cloudflare вместо этого кэшировать и повторно проверять ответ, что приводит кREVALIDATEDилиEXPIRED. См. Изучитеno-storeиno-cacheдирективы и Условия в таблице. -
Источник вернул
Set-Cookieзаголовок. По умолчанию Cloudflare не кэширует ответы, которые включаютSet-Cookie. Чтобы кешировать ответ, используйте один из следующих вариантов:- Задайте явный Edge TTL для Cache Rule с помощью Edge TTL → Ignore cache-control header and use this TTL или Status code TTL. Cloudflare игнорирует директивы источника, удаляет
Set-Cookie, и кеширует ответ. - Настройте отдачу источником
Cache-Control: private="Set-Cookie"илиno-cache="Set-Cookie". Cloudflare удаляет указанный заголовок и кеширует остальное. - Удаление
Set-Cookieдо принятия решения о кешировании, используя Response Header Modification Transform Rule. - На тарифных планах Enterprise с Origin Cache Control отключено, Cloudflare удаляет
Set-Cookieи кэширует ответ на уровне кэширования по умолчанию.Cache Level: Cache EverythingPage Rule или правило кеширования с Подлежит кешированию имеет значение Да (если не задан явный Edge TTL) переопределяет это значение и возвращаетBYPASS.
См. Взаимодействие
Set-Cookieзаголовок ответа с Cache с полной матрицей. - Задайте явный Edge TTL для Cache Rule с помощью Edge TTL → Ignore cache-control header and use this TTL или Status code TTL. Cloudflare игнорирует директивы источника, удаляет
-
Источник вернул
Vary: *. Это значение всегда обходит кэш, независимо от прочих настроек. -
Запрос содержал
Authorizationзаголовок и Origin Cache Control включён (значение по умолчанию для планов Free, Pro и Business). В этом режиме ответ подлежит кэшированию только еслиCache-Controlтакже включаетpublic,s-maxage, илиmust-revalidate. На планах Enterprise с отключённым Origin Cache ControlAuthorizationсам по себе не запрещает кеширование.
См. BYPASS со справочным определением этого статуса.
Повторный MISS: подлежит кешированию, но отсутствует в кеше
MISS при первом запросе в каждом дата-центре ожидаем: этот запрос заполняет кеш. Если один и тот же URL продолжает возвращать MISS в последовательных запросах, происходит одно из следующего.
Вариативность ключа кеша
По умолчанию Cloudflare формирует ключ кеша на основе схемы, хоста, пути и строки запроса к источнику. При соответствующей настройке в него также могут входить cookie, заголовки и тип устройства. Схемой в ключе кеша Cloudflare считает ту схему, которую он использует для обращения к источнику, а не ту, которую использовал клиент, поэтому зона с единственной схемой подключения к источнику обслуживает запросы HTTP и HTTPS от клиентов из одной и той же записи кеша.
Если каждый реальный запрос клиента формирует свой ключ, кеш никогда не видит повторов и каждый запрос становится MISS. Типичные шаблоны:
- Параметры запроса, которые меняются при каждом запросе идентификаторы сессий, временные метки или маркетинговые теги, такие как
utm_*. По умолчанию каждая уникальная строка запроса образует отдельную запись кеша. Настройте Cache Rules или Настройки Cache Key чтобы исключить или игнорировать параметры, значение которых меняется от запроса к запросу. Сортировка лишь приводит порядок параметров к единому виду: используйте её, когда запросы отличаются только порядком параметров, а не когда отличаются сами значения. - пользовательский ключ кеша содержит cookie или заголовок со значением, которое меняется для каждого пользователя. Заголовок Создание пользовательских ключей кеша раздел предупреждает, что пользовательские ключи «могут снизить долю попаданий в кеш и привести к фрагментации кеша»: это то же самое поведение.
- Кеширование по типу устройства классифицирует клиентов не так, как ожидалось, особенно для ботов или клиентов с нестандартными
User-Agentзначения. - Vary в Cache Rules настроен для заголовка, источник указывает этот заголовок в своём
Varyзаголовок ответа, а действие:normalizeилиpassthrough. Каждый вариант ответа хранится под отдельным ключом. Если у заголовка высокая кардинальность, например ненормализованныйAccept-Languageзначение или заголовок для конкретного пользователя, практический процент попаданий в кеш снижается. Значениеbypassдействие полностью предотвращает кэширование.
Два идентичных запроса дают одинаковый ключ кеша и не позволяют выявить различия. Для диагностики используйте Трассировка правила чтобы увидеть применённую конфигурацию ключа кеша и действие Vary для URL, а затем сравнить их с атрибутами запроса (строка запроса, куки, заголовки, тип устройства), которые различаются в реальных запросах клиентов.
Вытеснение и ресурсы с низким трафиком
Ресурсы с низким трафиком могут быть вытеснены из кеша до поступления следующего запроса. Если два последовательных запроса к одному и тому же URL из одного и того же дата-центра возвращают MISS, включите Tiered Cache или Cache Reserve чтобы дольше хранить редко запрашиваемый контент.
Если ваши запросы попадают в разные дата-центры Cloudflare, в каждом из них формируется собственный первый запрос MISS. Сравните код дата-центра: последние три символа cf-ray заголовок, чтобы подтвердить, что оба ответа поступили из одного дата-центра. Разные клиентские сети могут обращаться к одному и тому же дата-центру, поэтому смена сети не гарантирует смену местоположения.
Убедитесь, что ответ попадает в кеш
После изменения конфигурации дважды запросите URL с того же клиента и проверьте, что результат соответствует ожидаемому для вашей конфигурации:
- Актуальный положительный Edge TTL:
cf-cache-status: HITиAgeзаголовок, значение которого увеличивается при последующих запросах.Ageотсутствует при первом запросе, который заполняет кэш локального дата-центра с вышестоящего уровня через Tiered CacheHITотражает верхний уровень, но локальный дата-центр еще не обслужил запрос из кеша. Последующие запросы включаютAge, а при использовании Tiered Cache это значение может быть уже большим, поскольку отражает возраст объекта в общесетевом кеше Cloudflare. - Источник возвращает
Cache-Control: no-cacheс Origin Cache Control включено:cf-cache-status: REVALIDATEDкогда источник подтверждает, что кэшированная копия не изменилась, илиEXPIREDкогда источник возвращает новое содержимое. Оба варианта означают, что ответ кэширован.must-revalidateсам по себе не заставляет выполнять повторную проверку при каждом запросе: он лишь предотвращает выдачу устаревшего содержимого после истечения TTL актуальности.
Если ответ по-прежнему MISS или BYPASS после этих проверок сделайте два полных снимка ответа (заголовки запроса и ответа, включая cf-ray значений) и создайте обращение в поддержку. Значение cf-ray значения необходимы, чтобы отследить запрос в сети Cloudflare.
Дополнительные материалы
- Кеширование ответов справочная информация по каждому
cf-cache-statusзначение. - Поведение кеша по умолчанию когда Cloudflare по умолчанию успешно кэширует.
- Cache Rules настройка Edge TTL, применимости кэширования и ключа кэша.
- Cache Analytics измеряйте коэффициент попаданий в кэш и выявляйте URL с низкой эффективностью.