← Cloudflare Workers / workers / cache
Omezení
Tato stránka uvádí scénáře, ve kterých se Workers Caching neuplatňuje, a dále poznámky k tomu, jak souvisí s dalšími cache, které již možná používáte.
Nepodporované scénáře
HTTP metody
Pouze GET a HEAD požadavky jsou ukládány do mezipaměti. POST, PUT, PATCH, DELETE, a další metody vždy váš Worker vyvolají.
GET a HEAD pro stejnou URL sdílejí jeden záznam v cache. HEAD požadavek, který přijde do studené mezipaměti, se převede na GET interně, aby se mezipaměť naplnila celým assetem. Viz Cache keys.
Pokud potřebujete ukládat do mezipaměti odpovědi na neidempotentní požadavky, udělejte to ve Workeru explicitně, například vytvořením hashe těla požadavku do syntetické URL adresy a provedením interního GET subrequest.
Upgrady WebSocket
Požadavky na upgrade WebSocket (GET hodnotou Upgrade: websocket) obcházejí mezipaměť a vždy vyvolají váš Worker. Relace WebSocket jsou už ze své podstaty stavové, takže nemá smysl je ukládat do mezipaměti.
Vlastní metody RPC
Pouze fetch() volání na WorkerEntrypoint procházejí přes Workers Caching. Vlastní metody RPC jako ctx.exports.Backend.getUser(id) obejde cache a callee vždy spustí bez ohledu na hodnotu entrypointu cache.enabled nastavení.
Chcete-li kešovat část práce, která je aktuálně vystavena jako metoda RPC, přepracujte ji na fetch handler na vlastním entrypointu a zavolat ho s fetch().
Stavové kódy, které se nikdy neukládají do mezipaměti
Workers Caching následující odpovědi nikdy neukládá do mezipaměti, a to ani při explicitním Cache-Control direktivy:
520-526(Cloudflare failsafe responses) se považují za dočasné chyby a Worker se pokaždé spustí znovu.206 Partial Contentvrácená vaším Workerem se neukládá. Workers Caching očekává, že váš Worker vrátí úplnou200odpověď a rozsah si rozděluje sama. Přečtěte siRangepožadavky pro podporovaný vzor.
Další typy vyvolání
Workers Caching se vztahuje pouze na HTTP požadavky zpracované fetch handler na Vstupní bod Workeru. Následující typy volání se vždy spouští bez zapojení cache:
- Cron Triggers, scheduled invocations via the
scheduledhandler. - Queue consumers : zprávy doručené přes
queuehandler. - Workflows, workflow step execution.
- Tail Workers, trace event handlers.
- Durable Objects : volání Durable Object se nikdy neukládají do mezipaměti bez ohledu na handler nebo metodu. Pokud chcete ukládat HTTP odpovědi Durable Object do mezipaměti, obalte ho entrypointem Workeru s povoleným ukládáním do mezipaměti. Viz Ukládání odpovědí Durable Object do mezipaměti.
Vymazání podle hostitele
Neexistuje režim "purge by host". Mezipaměť patří Workeru, nikoli doméně, the host is not part of the cache key, so purging by host would not map onto anything the cache stores. Use vymazání podle tagu, vymazání podle prefixu cesty, nebo purgeEverything místo toho.
Předehřívání mezipaměti
Neexistuje API pro předběžné naplnění mezipaměti odpověďmi vygenerovanými v době sestavení. Odpověď se do mezipaměti uloží až poté, co byla alespoň jednou obsloužena. Pokud potřebujete mít předrenderovaný obsah k dispozici již pro prvního žadatele, použijte Static Assets.
Limity
Velikost odpovědi
Limity velikosti odpovědi jsou stejné jako u cache zóny Cloudflare. Limity podle jednotlivých plánů naleznete v Limity velikosti pro ukládání do mezipaměti.
Cache-Tag limity
Limity na počet, délku a znakovou sadu Cache-Tag hodnoty jsou stejné jako u Cloudflare zone cache. Viz Limity cache tagů pro úplný seznam.
Limity četnosti pro vymazávání
ctx.cache.purge() používá stejný systém omezování rychlosti jako zone purge API. Protože je ale Workers Caching svázán s Workerem, nikoli se zónou, Workers Caching vždy používá Limity úrovně Free popsané v Dostupnost a limity, bez ohledu na tarif vašeho účtu nebo zóny.
Vztah k ostatním cache
Konfigurace cache na úrovni zóny
Workers Caching je cache vašeho Workeru, nikoli cache vaší zóny. Jako konfigurační rozhraní slouží samotný Worker, takže vedle něj neexistuje žádná samostatná vrstva pravidel nebo nastavení. Na Workers Caching se nevztahuje nic z následujícího:
| Funkce na úrovni zóny | Ekvivalent v ukládání do mezipaměti Workers |
|---|---|
| Cache Rules a Cache Response Rules | Nastavte Cache-Control hlavičky ve svém Workeru, nebo se podle požadavku rozhodovat a vracet různé hlavičky pro různé cesty. |
| Přizpůsobení cache key v Cache Rules | Workers Caching má vlastní skladbu klíče, více informací najdete v Cache keys. Klíč upravte úpravou požadavku, například přepsáním URL nebo nastavením ctx.props v gateway Workeru). |
| Nastavení úrovně cache na úrovni zóny (bypass / standard / aggressive / ignore query string) | Cache-Control hlavičky u odpovědi vyjadřují stejný záměr, jen na úrovni jednotlivého požadavku. |
| Výchozí seznam přípon souborů ukládaných do mezipaměti pro danou zónu | Workers Caching cachuje jakoukoli odpověď, jejíž hlavičky uvádějí, že je cacheovatelná, bez ohledu na příponu souboru. |
| Vlastní topologie Tiered Cache | Workers Caching standardně používá obecnou vrstvenou topologii mezipaměti. Protože se Worker může spustit kdekoli, pevně danou vlastní topologii nelze použít. Budoucí integrace s Smart Placement může vrstvení dále přizpůsobit. |
| Rulesets které upravují požadavek nebo odpověď před cache | Transformujte požadavek nebo odpověď v kódu vašeho Workeru předtím, než jej vrátíte. |
Chcete-li ovlivnit cache svého Workeru, upravte svůj Worker. Cache-Control hlavičky, ctx.props, skládání service bindings a ctx.cache.purge() pokrývá rozsah konfigurace.
Cache API (caches.default)
Cache API je samostatné programové úložiště mezipaměti. Je nezávislé na Workers Caching: operace v jednom neovlivňují druhé a ctx.cache.purge() je to, co invaliduje záznamy Workers-Caching.
U nových Workerů upřednostněte Workers Caching. Cache API je už ze své podstaty nízkoúrovňový primitiv:
- Nefunguje jako read-through cache: odpovědi se do cache ukládají jen tehdy, když je Worker výslovně zavolá pomocí
put(), a každý požadavek stále spouští váš Worker při příchodu. - Neplatí, že by sloučit souběžné požadavky pro stejný prostředek. Nápor provozu na novou URL vyvolá váš Worker jednou za každý požadavek.
- Neúčastní se tiered caching.
Workers Caching poskytuje všechny tři možnosti automaticky. Cache API zůstává užitečné, pokud potřebujete jemně odstupňovanou programovou kontrolu.
fetch() cachování subrequestů
Workers Caching je cache na straně serveru před váš Worker. Jde o samostatnou mezipaměť, odlišnou od té, která stojí před odchozími fetch() subrequestů, které váš Worker odesílá na své vlastní origin servery. Oba fungují nezávisle na sobě: fetch() subrequest hit ušetří cestu na váš origin server, zatímco Workers Caching hit ušetří spuštění vašeho Workeru úplně.
cf vlastnosti na Request se v obou případech chovají odlišně:
cf vlastnost |
U odchozích fetch() do vašeho originu |
Na ctx.exports.<Entrypoint>.fetch() |
|---|---|---|
cf.cacheKey |
Podporováno | Podporováno, viz Custom Cache Keys |
cf.cacheControl |
Podporováno | Podporováno, viz Přepsat Cache-Control od volajícího Workeru |
cf.cacheTtl |
Podporováno | Není podporováno: nastavte TTL vrácením Cache-Control: max-age=N (nebo s-maxage=N) od volané funkce, nebo ho přepsat pomocí cf.cacheControl od volajícího |
cf.cacheEverything |
Podporováno | Není podporováno: Workers Caching rozhoduje o možnosti uložení do cache na základě Cache-Control; neexistuje způsob, jak vynuceně uložit do mezipaměti odpověď, kterou by jinak nebylo možné ukládat do mezipaměti |
Již brzy
Následující rozhraní jsou aktuálně ve vývoji:
- Dashboard UI pro povolení ukládání do mezipaměti bez Wrangler.
- Cache Analytics v Workers Observability.