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

Ограничения

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

Неподдерживаемые сценарии

Методы HTTP

Только GET и HEAD запросы кешируются. POST, PUT, PATCH, DELETE, и другие методы всегда вызывают ваш Worker.

GET и HEAD для одного и того же URL используют одну запись кеша. HEAD запрос, поступающий при холодном кеше, преобразуется в GET внутренне, чтобы кеш заполнялся полным ресурсом. См. Ключи кеша.

Если вам нужно кэшировать ответы на неидемпотентные запросы, делайте это в Worker явно: например, преобразуйте тело запроса в синтетический URL с помощью хеширования и выполните внутренний GET подзапрос.

Обновления до WebSocket

Запросы на обновление до WebSocket (GET с Upgrade: websocket) обходят кеш и всегда вызывают ваш Worker. Сессии WebSocket по определению имеют состояние и не являются подходящей единицей кеширования.

Пользовательские методы RPC

Только fetch() вызовы для WorkerEntrypoint проходят через Workers Caching. Пользовательские методы RPC, такие как ctx.exports.Backend.getUser(id) обходят кеш и всегда выполняют вызываемую функцию независимо от точки входа cache.enabled параметр.

Чтобы кешировать операцию, которая сейчас реализована как метод RPC, переделайте ее в fetch обработчик в своей собственной точке входа и вызвать его с fetch().

Коды состояния, которые никогда не кэшируются

Workers Caching никогда не сохраняет перечисленные ниже ответы, даже при явном Cache-Control директивы:

Другие типы вызовов

Workers Caching применяется только к HTTP-запросам, которые обрабатывает fetch обработчик на Точка входа Worker. Следующие типы вызовов всегда выполняются без участия кэша:

Очистка по имени хоста

Режима «очистки по хосту» не существует. Кеш принадлежит Worker, а не домену : хост не входит в ключ кеша, поэтому очистка по хосту не будет соответствовать ничему из того, что хранится в кеше. Используйте очистка по тегу, очистка по префиксу пути, или purgeEverything взамен.

Предварительный прогрев кеша

API для предварительного заполнения кеша ответами, сформированными во время сборки, не существует. Ответ кешируется только после того, как он хотя бы один раз был отдан клиенту. Если вам нужно, чтобы предварительно отрендеренный контент был доступен уже первому запросившему, используйте Static Assets.

Лимиты

Размер ответа

Лимиты размера ответа совпадают с лимитами кеша зоны Cloudflare. Лимиты по каждому плану см. в Ограничения размера для кеширования.

Cache-Tag лимиты

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

Лимиты скорости очистки

ctx.cache.purge() использует ту же систему ограничения частоты запросов, что и API очистки зоны. Однако, поскольку Workers Caching привязан к Worker, а не к зоне, Workers Caching всегда использует Лимиты уровня Free описанного в Доступность и ограничения, независимо от тарифного плана вашего аккаунта или зоны.

Связь с другими кешами

Конфигурация кэша на уровне зоны

Кеширование Workers кэш вашего Worker, а не кеш вашей зоны. Настройка выполняется через сам Worker, поэтому отдельного слоя правил или параметров не требуется. Ничто из перечисленного ниже не относится к Workers Caching:

Функция на уровне зоны Эквивалент в Workers Caching
Cache Rules и Cache Response Rules Задайте Cache-Control заголовки в своём Worker либо ветвить логику по запросу и возвращать разные заголовки для разных путей.
Настройка ключа кеша в Cache Rules У кеширования Workers своя структура ключа, см. Ключи кеша. Сформируйте ключ, изменив запрос (например, переписав URL или задав ctx.props в шлюзовом Worker).
Настройки уровня кэша на уровне зоны (bypass / standard / aggressive / ignore query string) Cache-Control заголовки в ответе выражают то же намерение, но на уровне отдельного запроса.
Список расширений файлов, кэшируемых по умолчанию для зоны Кеширование Workers сохраняет в кеш любой ответ, чьи заголовки указывают на возможность кеширования, независимо от расширения файла.
Пользовательские топологии многоуровневого кеша По умолчанию Workers Caching использует универсальную многоуровневую топологию кеша. Поскольку Worker может выполняться где угодно, фиксированная пользовательская топология здесь неприменима: будущие интеграции с Smart Placement может дополнительно настроить уровни кеширования.
Наборы правил которые изменяют запрос или ответ до обращения к кэшу Преобразуйте запрос или ответ в коде Worker перед его возвратом.

Чтобы повлиять на кеш своего Worker, измените сам Worker. Cache-Control заголовки, ctx.props, композицию service binding и ctx.cache.purge() охватывают все возможные параметры конфигурации.

Cache API (caches.default)

Cache API представляет собой отдельное программное хранилище кеша. Оно не зависит от Workers Caching: операции с одним хранилищем не влияют на другое, и ctx.cache.purge() является тем, что аннулирует записи Workers-Caching.

Для новых Workers предпочтительнее Workers Caching. Cache API по своей природе является примитивом более низкого уровня:

Workers Caching обеспечивает все три возможности автоматически. Cache API по-прежнему полезен, если нужен точный программный контроль.

fetch() кэширование подзапросов

Кеширование Workers это серверный кеш перед ваш Worker. Это отдельный кеш, отличный от того, что стоит перед исходящими fetch() подзапросов, которые ваш Worker делает к собственным origin. Они работают независимо друг от друга: fetch() попадание в кэш подзапроса избавляет от обращения к вашему origin, тогда как попадание в Workers Caching избавляет от запуска Worker вообще.

cf свойства у Request ведут себя по-разному в этих двух случаях:

cf свойство При исходящих fetch() на ваш origin На ctx.exports.<Entrypoint>.fetch()
cf.cacheKey Поддерживается Поддерживается, см. Custom cache keys
cf.cacheControl Поддерживается Поддерживается, см. Переопределить Cache-Control от вызывающего Worker
cf.cacheTtl Поддерживается Не поддерживается: задайте TTL, вернув Cache-Control: max-age=N (или s-maxage=N) от вызываемой функции или переопределив его с помощью cf.cacheControl от вызывающей стороны
cf.cacheEverything Поддерживается Не поддерживается: возможность кеширования определяет Workers Caching на основе Cache-Control; способа принудительно кешировать не подлежащий кешированию ответ не существует

Скоро появится

Следующие интерфейсы находятся в разработке: