← Cloudflare Cache / cache / concepts
Ревалидация
Stale-while-revalidate
Когда срок действия закэшированного ресурса истекает, Cloudflare использует stale-while-revalidate директива в Cache-Control чтобы определить, можно ли продолжать отдавать устаревший ресурс, одновременно получая свежую копию с источника. Если директива присутствует и ресурс находится в пределах допустимого окна устаревания, Cloudflare отдаёт посетителям просроченный контент и выполняет ревалидацию в фоновом режиме. Используя заголовки вроде If-Modified-Since и ETag, Cloudflare проверяет актуальность контента без его полной повторной загрузки, снижая нагрузку на источник.
Асинхронная повторная проверка
Ревалидация выполняется полностью асинхронно. Когда срок действия кешированного объекта истекает и stale-while-revalidate задан, первый запрос, поступивший после истечения срока действия, запускает повторную проверку в фоновом режиме. Этот запрос сразу же получает устаревшее содержимое со статусом UPDATING вместо того чтобы блокировать запрос до ответа источника. Все последующие запросы также получают устаревший контент со статусом UPDATING до тех пор пока источник не ответит. После завершения ревалидации последующие запросы получают свежий контент со статусом HIT статус.
Если устаревший контент ещё действителен, Cloudflare задаёт новый TTL. Если контент изменился, источник предоставляет новый контент взамен старого.
Управление поведением устаревшего контента
Cloudflare отдаёт устаревший контент во время повторной проверки, только если ваш источник включает stale-while-revalidate директива в своём Cache-Control заголовок. Без этой директивы посетители ждут ответа источника, прежде чем получить содержимое.
Если ваш источник задаёт stale-while-revalidate но хотите переопределить это поведение, вы можете отключить отдачу устаревшего содержимого через Показ устаревшего контента во время ревалидации настройку в Cache Rules.
Директивы, отключающие stale-while-revalidate
Когда Origin Cache Control включен, применяется следующий Cache-Control директивы не позволяют Cloudflare отдавать устаревшее содержимое согласно RFC 9111 §4.2.4 ↗:
must-revalidateЗапрещает отдавать устаревшее содержимое. Кэш должен сначала выполнить повторную проверку с источником.proxy-revalidateТо же самое, что иmust-revalidate, но применяется только к общим кешам (таким как Cloudflare).s-maxageПодразумеваетproxy-revalidateсемантику, поэтому общие кеши не могут отдавать устаревший контент.no-cacheТребует повторной проверки перед отправкой любого кэшированного ответа.
Если любая из этих директив присутствует вместе с stale-while-revalidate, Cloudflare не будет отдавать устаревшее содержимое: запросы будут возвращать EXPIRED вместо UPDATING.
Полный список доступных директив и поведение при отключённом Origin Cache Control см. в разделе Директивы Cache-Control.
Умная повторная проверка в сторону пользователей
Если оба Last-Modified ↗ и Etag ↗ заголовки отсутствуют в ответе исходного сервера, Smart Edge Revalidation будет использовать время кэширования объекта в глобальной сети Cloudflare как Last-Modified заголовка. Когда браузер отправляет запрос на повторную проверку в Cloudflare с помощью If-Modified-Since или If-None-Match, наша глобальная сеть может отвечать на такие запросы повторной проверки, используя Last-Modified заголовок, сформированный Smart Edge Revalidation. Таким образом, глобальная сеть Cloudflare может обеспечивать эффективную ревалидацию, даже если источник не отправляет эти заголовки.