← Cloudflare Workers / workers / runtime-apis
Кеш
Контекст
Cache API ↗ дает точный контроль над чтением и записью из глобальная сеть Cloudflare ↗ кеш.
Cache API доступен по всему миру, но содержимое кеша не реплицируется за пределы исходного дата-центра. Ключ кеша, GET /users ответ можно кешировать в исходном дата-центре, но в другом дата-центре он появится, только если был создан там явно.
Workers, развёрнутые на пользовательских доменах, имеют доступ к функциональным cache операции. Так же ведут себя и Функции Pages, независимо от того, подключены ли они к пользовательским доменам или *.pages.dev доменов.
Однако любые операции Cache API в редакторе панели управления Cloudflare Workers и Playground превью не будут иметь эффекта. Для Workers, работающих за Cloudflare Access, Cache API пока недоступен.
Доступ к Cache
caches.default API во многом основан на Cache API веб-браузеров, но есть важные отличия. Например, среда выполнения Cloudflare Workers предоставляет единый глобальный объект кеша.
let cache = caches.default;
await cache.match(request);Вы можете создавать дополнительные экземпляры Cache и управлять ими через caches.open ↗ метод.
let myCache = await caches.open('custom:cache');
await myCache.match(request);Headers
Наша реализация Cache API учитывает следующие заголовки HTTP в ответе, переданном в put():
Cache-Control- Управляет директивами кеширования. Это согласуется с Директивы Cache-Control в Cloudflare. См. Edge TTL список кодов ответа HTTP и соответствующих значений TTL, когда
Cache-Controlдирективы отсутствуют.
- Управляет директивами кеширования. Это согласуется с Директивы Cache-Control в Cloudflare. См. Edge TTL список кодов ответа HTTP и соответствующих значений TTL, когда
Cache-Tag- Позволяет впоследствии очищать ресурсы по тегу (тегам).
ETag- Позволяет
cache.match()чтобы обрабатывать условные запросы сIf-None-Match.
- Позволяет
Expiresстрока- Строка, которая указывает, когда ресурс становится недействительным.
Last-Modified- Позволяет
cache.match()чтобы обрабатывать условные запросы сIf-Modified-Since.
- Позволяет
Это отличается от Cache API веб-браузера тем, что заголовки запроса и ответа не учитываются.
Методы
Put
cache.put(request, response);-
put(request, response): Promise- Пытается добавить ответ в кеш, используя переданный запрос в качестве ключа. Возвращает промис, который разрешается в
undefinedнезависимо от того, успешно ли кеш сохранил ответ.
- Пытается добавить ответ в кеш, используя переданный запрос в качестве ключа. Возвращает промис, который разрешается в
Параметры
-
requeststring | Request- Либо строка, либо
Requestобъект, который будет использоваться в качестве ключа. Если передана строка, она интерпретируется как URL для нового объекта Request.
- Либо строка, либо
-
responseResponse- A
Responseобъект для хранения под указанным ключом.
- A
Недопустимые параметры
cache.put выбросит ошибку, если:
-
requestявляется методом, отличным отGET. -
responseпереданный имеетstatus206 Partial Content↗. -
responseсодержит заголовокVary: *. ЗначениеVaryзаголовок представляет собой звёздочку (*). См. Спецификация Cache API ↗, где это описано подробнее.
Ошибки
cache.put возвращает 413 ошибку, если Cache-Control указывает не кешировать, или если ответ слишком большой.
Match
cache.match(request, options);-
match(request, options): Promise<Response | undefined>- Возвращает Promise, оборачивающий объект ответа, привязанный к этому запросу.
Параметры
-
requeststring | Request- Строка или
Requestобъект, используемый как ключ поиска. Строки интерпретируются как URL для новогоRequestобъект.
- Строка или
-
options- Может содержать только одно свойство:
ignoreMethod(логический тип). Когдаtrue, запрос считаетсяGETзапрос независимо от его фактического значения.
- Может содержать только одно свойство:
В отличие от браузерного Cache API, Cloudflare Workers не поддерживают ignoreSearch или ignoreVary параметры для match(). Этого можно добиться, удалив строки запроса или HTTP-заголовки на put() раз.
Наша реализация Cache API учитывает следующие заголовки HTTP в запросе, переданном в match():
-
Range- Приводит к
206ответ, если найден подходящий ответ с заголовком Content-Length. Кеш Cloudflare всегда учитывает запросы с диапазоном (Range), даже еслиAccept-Rangesзаголовок присутствует в ответе.
- Приводит к
-
If-Modified-Since- Приводит к
304ответ, если найден подходящий ответ сLast-Modifiedзаголовка со значением до времени, указанного вIf-Modified-Since.
- Приводит к
-
If-None-Match- Приводит к
304ответ, если найден подходящий ответ сETagзаголовка со значением, совпадающим со значением вIf-None-Match.
- Приводит к
Ошибки
cache.match генерирует 504 ответ с ошибкой, если запрошенное содержимое отсутствует или устарело. Cache API не предоставляет доступ к этому 504 напрямую в скрипт Worker, а вместо этого возвращает undefined. Тем не менее базовый 504 по-прежнему виден в Cloudflare Logs.
Если вы используете Cloudflare Logs, вы можете увидеть следующие 504 ответов с этим RequestSource edgeWorkerCacheAPI. Это ожидаемо, если закешированный ресурс отсутствовал или устарел. Обратите внимание, что edgeWorkerCacheAPI запросы уже отфильтрованы в других представлениях, например в Cache Analytics. Чтобы отфильтровать эти запросы или оставить только запросы от конечных пользователей вашего сайта, см. Фильтрация конечных пользователей.
Delete
cache.delete(request, options);delete(request, options): Promise<boolean>
Удаляет Response объект из кеша и возвращает Promise для булевого ответа:
true: Ответ был кеширован, но теперь удалёнfalse: Ответ отсутствовал в кеше на момент удаления.
Параметры
-
requeststring | Request- Строка или
Requestобъект, используемый как ключ поиска. Строки интерпретируются как URL для новогоRequestобъект.
- Строка или
-
optionsобъект- Может содержать только одно свойство:
ignoreMethod(логический тип). Считайте метод запроса GET независимо от его фактического значения.
- Может содержать только одно свойство: