Документация Запланировать пилот

Origin Cache Control

Origin Cache Control это функция Cloudflare. Если она включена на сайте клиента с планом Enterprise, это означает, что Cloudflare должен строго соблюдать Cache-Control директивы, полученные от сервера источника. У клиентов на тарифах Free, Pro и Business эта функция включена по умолчанию.

Cache-Control директивы в ответе HTTP от вашего сервера источника задают определённые инструкции по кешированию ↗ промежуточным сервисам вроде Cloudflare.

При включенной функции Origin Cache Control Cache-Control директивы в ответе сервера источника будут соблюдаться как указано. Например, если ответ содержит max-age директива со значением 3600 секунд, Cloudflare будет кешировать ресурс в течение этого времени, прежде чем снова обратиться к серверу источника за обновлениями.

Cloudflare Cache Rules позволяет пользователям дополнять или переопределять для исходного сервера Cache-Control заголовки или политики по умолчанию заданный Cloudflare.

В следующих разделах рассматриваются:

Cache-control директивы

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

Если передается несколько директив одновременно, они разделяются запятой. Если директива принимает аргумент, он указывается после неё через знак равенства. Например: max-age=86400.

Директивы делятся на четыре группы: кешируемость, истечение срока действия, повторная проверка, а также другое.

Пригодность к кешированию

Пригодность к кешированию показывает, должен ли ресурс попадать в кеш. Приведённые ниже директивы определяют эту пригодность для конкретного ресурса.

Истечение срока действия

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

Убедитесь, что HTTP Expires заголовок на исходном сервере задан с использованием времени по Гринвичу (GMT), как это предусмотрено в RFC 2616 ↗.

Ревалидация

Ревалидация определяет, как должен вести себя кеш после истечения срока действия ресурса, а перечисленные ниже директивы влияют на это поведение.

stale-if-error директива игнорируется, если Always Online включен или передана явная директива протокола. Примеры явных директив протокола: no-store или no-cache cache директива, must-revalidate cache-response-directive или применимую s-maxage или proxy-revalidate cache-response-directive.

Прочее

Ниже перечислены дополнительные директивы, влияющие на поведение кэша.

Изучите no-store и no-cache директивы

Часто возникает путаница между директивами Cache-Control: no-store и Cache-Control: no-cache, особенно в том, как они влияют на кеширование в браузере и такие функции, как Back-Forward Cache ↗ (BFCache).

no-store

no-cache

Дополнительные сведения о том, как эти директивы работают при включённом или отключённом Origin Cache Control, см. в разделе Директивы раздел.

Включите Origin Cache Control

Если включить Origin Cache Control, Cloudflare будет стремиться строго соблюдать RFC 7234 ↗. Клиенты на плане Enterprise могут выбирать, должен ли Cloudflare следовать этому поведению, включая или отключая Origin Cache Control для своих сайтов через Cache Rules в панель управления или через API. У клиентов на планах Free, Pro и Business эта опция включена по умолчанию и не может быть отключена.

Поведение Origin Cache Control

В этом разделе рассматриваются директивы и условия поведения, связанные с включением и отключением Origin Cache Control.

Директивы

В таблице ниже перечислены директивы и их поведение при отключённом и включённом Origin Cache Control.

Директива Origin Cache Control: поведение при отключении Origin Cache Control: поведение при включении
s-maxage=0 Не будет кэшироваться. Кеширует и всегда выполняет повторную проверку
max-age=0 Не будет кэшироваться. Кеширует и всегда выполняет повторную проверку.
no-cache Не будет кэшироваться. Кеширует и всегда выполняет повторную проверку. Не отдаёт устаревшее содержимое.
no-cache=<headers> Не будет кэшироваться. Кеширует, если присутствуют заголовки, указанные в no-cache=<headers> отсутствуют. Всегда выполняется повторная проверка, если любой заголовок, упомянутый в no-cache=<headers> присутствует.
Private=<headers> Не будет кэшироваться. Не кеширует <headers> значений, упомянутых в Private=<headers> директива.
must-revalidate Директива кеша игнорируется, и отдается устаревший контент. Не отдает устаревшее содержимое. Требуется ревалидация как для CDN, так и для браузера.
proxy-revalidate Директива кеша игнорируется, и отдается устаревший контент. Не отдает устаревшее содержимое. Требуется ревалидация для CDN, но не для браузера.
no-transform Может выполнять (рас)архивацию Gzip, обработку Polish, фильтрацию email и другое. Не преобразует тело ответа.
s-maxage=delta, delta>1 Так же, как и max-age. Max-age и proxy-revalidate.
immutable Не проксируется дальше по цепочке. Проксируется далее по цепочке. Обращено к браузеру, не влияет на кеширующие прокси.
no-store Не будет кэшироваться. Не будет кэшироваться.

Условия

Некоторые сценарии также влияют на поведение Origin Cache Control, независимо от того, включена эта функция или отключена.

Условие

Origin Cache Control: поведение при отключении

Origin Cache Control: поведение при включении

Наличие Authorization заголовок.

Контент может кешироваться.

Контент кешируется только если must-revalidate, public, или s-maxage также присутствует.

Использование no-cache заголовок.

В логах, cacheStatus=miss.

В логах, cacheStatus=bypass.

Ответ источника содержит Set-Cookie заголовок, и используется уровень кеша по умолчанию.

Контент может кешироваться с удалёнными set-cookie заголовок.

Контент не кешируется.

Задано значение Browser Cache TTL.

Cache-Control возвращаемый конечному пользователю, не включает private.

Если источник возвращает private в Cache-Control то сохраните его.

Примеры

Ознакомьтесь с примерами ниже, чтобы узнать, какие директивы использовать с Cache-Control заголовок для управления определённым поведением кеширования.

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

Cache-Control: public, max-age=86400

Убедитесь, что секретный ресурс никогда не кешируется.

Cache-Control: no-store

Кешируйте ресурсы в браузерах, но не в прокси-кеше.

Cache-Control: private, max-age=3600

Кешируйте ресурсы в клиентском и прокси-кеше, но при отдаче отдавайте предпочтение ревалидации.

Cache-Control: public, no-cache

Кешируйте ресурсы в прокси-кеше, но ТРЕБУЙТЕ ревалидации прокси при отдаче.

Cache-Control: public, no-cache, proxy-revalidate или Cache-Control: public, s-maxage=0

Кешируйте ресурсы в прокси-кеше, но ТРЕБУЙТЕ ревалидации любым кешем при отдаче.

Cache-Control: public, no-cache, must-revalidate

Кешируйте ресурсы, но не позволяйте прокси изменять их.

Cache-Control: public, no-transform

Эта конфигурация также отключает такие преобразования, как сжатие gzip или brotli, при передаче данных от нашей периферийной сети к вашим посетителям, если исходное содержимое было отдано без сжатия.

Кешируйте ресурсы с ревалидацией, но допускайте устаревшие ответы, если исходный сервер недоступен.

Cache-Control: public, max-age=3600, stale-if-error=60

При такой конфигурации Cloudflare пытается ревалидировать контент на исходном сервере после того, как он находился в кэше 3600 секунд (один час). Если вместо корректного ответа на ревалидацию сервер возвращает ошибку, Cloudflare продолжает отдавать устаревший ресурс еще в течение одной минуты после истечения срока его действия.

Задавайте разное время кеширования ресурсов на Cloudflare и в браузерах посетителей.

Cache-Control: public, max-age=7200, s-maxage=3600

Кешируйте ресурс и отдавайте его, пока выполняется ревалидация.

Cache-Control: max-age=600, stale-while-revalidate=30

Эта конфигурация означает, что ресурс считается актуальным в течение 600 секунд. Ещё до 30 дополнительных секунд ресурс может отдаваться в устаревшем виде, пока Cloudflare в фоновом режиме повторно проверяет его актуальность у источника. Дополнительную информацию см. в разделе Ревалидация.

Взаимодействие с другими функциями Cloudflare

В этом разделе описано, как другие функции Cloudflare взаимодействуют с Cache-Control директивы.

Edge Cache TTL

Edge Cache TTL Cache Rules переопределяют s-maxage и отключает директивы повторной проверки, если они присутствуют. Когда Origin Cache Control включен в Cloudflare, исходный Cache-Control заголовок передаётся дальше по цепочке от периферийного сервера Cloudflare, даже если заданы переопределения Edge Cache TTL. В противном случае, когда Origin Cache Control отключён в Cloudflare, Cloudflare переопределяет Origin Cache Control.

Browser Cache TTL

Browser Cache TTL Cache Rules переопределяют max-age настройки, передаваемые далее из нашей периферийной сети, как правило в браузеры ваших посетителей.

Polish

Polish отключён, если no-transform директива присутствует.

Gzip и другие способы сжатия

Сжатие отключено, если no-transform директива присутствует. Если исходный ресурс, полученный от источника, сжат, он отдаётся посетителю в сжатом виде. Если исходный ресурс не сжат, сжатие не применяется.

JavaScript Detections

JavaScript Detections внедрение отключено, если no-transform директива присутствует. cf.bot_management.js_detection.passed поле будет отображаться как missing для затронутых запросов.

Запросите бесплатный пилот

Запланировать пилот