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

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 для затронутых запросов.