← Cloudflare Workers / workers / runtime-apis
Cache
Kontext
Cache API ↗ umožňuje jemně granulární řízení čtení a zápisu z globální síť Cloudflare ↗ cache.
Cache API je dostupné globálně, ale obsah mezipaměti se nereplikuje mimo datové centrum, ve kterém vznikl. Klíč GET /users odpověď může být uložena do mezipaměti v datovém centru, kde vznikla, ale v jiném datovém centru neexistuje, dokud tam není výslovně vytvořena.
Workers nasazené na vlastních doménách mají přístup k funkčnímu cache operace. Totéž platí pro Pages functions, ať už jsou připojeny k vlastním doménám, nebo *.pages.dev domén.
Jakékoli operace Cache API v editoru dashboardu Cloudflare Workers a Playground náhledy nebudou mít žádný vliv. U Workerů, před kterými je Cloudflare Access, Cache API aktuálně není k dispozici.
Přístup k Cache
caches.default API je silně inspirováno rozhraním Cache API webových prohlížečů, existuje ale několik důležitých rozdílů. Prostředí Cloudflare Workers runtime například zpřístupňuje jediný globální objekt cache.
let cache = caches.default;
await cache.match(request);Další instance Cache můžete vytvářet a spravovat pomocí caches.open ↗ metoda.
let myCache = await caches.open('custom:cache');
await myCache.match(request);Hlavičky
Naše implementace Cache API respektuje následující hlavičky HTTP v odpovědi předané do put():
Cache-Control- Ovládá direktivy ukládání do mezipaměti. To je v souladu s Direktivy Cloudflare Cache-Control. Viz Edge TTL pro seznam kódů HTTP odpovědí a jejich TTL, když
Cache-Controldirektivy nejsou přítomny.
- Ovládá direktivy ukládání do mezipaměti. To je v souladu s Direktivy Cloudflare Cache-Control. Viz Edge TTL pro seznam kódů HTTP odpovědí a jejich TTL, když
Cache-Tag- Umožňuje později vymazat prostředky podle tagu (tagů).
ETag- Umožňuje
cache.match()k vyhodnocení podmíněných požadavků pomocíIf-None-Match.
- Umožňuje
Expiresstring- Řetězec určující, kdy prostředek přestane platit.
Last-Modified- Umožňuje
cache.match()k vyhodnocení podmíněných požadavků pomocíIf-Modified-Since.
- Umožňuje
Liší se to od Cache API webového prohlížeče v tom, že nerespektuje žádné hlavičky požadavku ani odpovědi.
Metody
Put
cache.put(request, response);-
put(request, response): Promise- Pokusí se přidat odpověď do mezipaměti s daným požadavkem jako klíčem. Vrací promise, který se vyhodnotí na
undefinedbez ohledu na to, zda se odpověď do mezipaměti úspěšně uložila.
- Pokusí se přidat odpověď do mezipaměti s daným požadavkem jako klíčem. Vrací promise, který se vyhodnotí na
Parametry
-
requeststring | Request- Buď řetězec, nebo
Requestobjekt, který slouží jako klíč. Pokud je předán řetězec, je interpretován jako URL pro nový objekt Request.
- Buď řetězec, nebo
-
responseOdpověď- A
Responseobjekt k uložení pod daným klíčem.
- A
Neplatné parametry
cache.put vyvolá chybu, pokud:
-
requestpředaná je jiná metoda nežGET. -
responsepředaný mástatusz206 Partial Content↗. -
responsepředaný obsahuje hlavičkuVary: *. HodnotaVaryhlavička je hvězdička (*). Viz Specifikace Cache API ↗ s dalšími informacemi.
Chyby
cache.put vrací 413 chybu, pokud Cache-Control nařizuje neukládat do mezipaměti, nebo pokud je odpověď příliš velká.
Match
cache.match(request, options);-
match(request, options): Promise<Response | undefined>- Vrátí Promise obalující objekt odpovědi přiřazený k danému požadavku.
Parametry
-
requeststring | Request- Řetězec nebo
Requestobjekt použitý jako vyhledávací klíč. Řetězce jsou interpretovány jako URL pro novýRequestobjekt.
- Řetězec nebo
-
options- Může obsahovat jednu možnou vlastnost:
ignoreMethod(Boolean). Kdyžtrue, požadavek se považuje zaGETpožadavek bez ohledu na jeho skutečnou hodnotu.
- Může obsahovat jednu možnou vlastnost:
Na rozdíl od Cache API prohlížeče Cloudflare Workers nepodporuje ignoreSearch nebo ignoreVary možnosti na match(). Tohoto chování dosáhnete odstraněním query řetězců nebo HTTP hlaviček na put() čas.
Naše implementace Cache API respektuje následující hlavičky HTTP v požadavku předaném do match():
-
Range- Vede k
206odpověď, pokud je nalezena odpovídající odpověď s hlavičkou Content-Length. Vaše mezipaměť Cloudflare vždy respektuje požadavky na rozsah, i kdyžAccept-Rangeshlavička je součástí odpovědi.
- Vede k
-
If-Modified-Since- Vede k
304odpověď, pokud je nalezena odpovídající odpověď sLast-Modifiedhlavičky s hodnotou před časem uvedeným vIf-Modified-Since.
- Vede k
-
If-None-Match- Vede k
304odpověď, pokud je nalezena odpovídající odpověď sETaghlavičky s hodnotou, která odpovídá hodnotě vIf-None-Match.
- Vede k
Chyby
cache.match generuje 504 chybovou odpověď, pokud požadovaný obsah chybí nebo mu vypršela platnost. Cache API toto 504 přímo do Worker skriptu, ale místo toho vrací undefined. Přesto podkladové 504 je stále viditelné v Cloudflare Logs.
Pokud používáte Cloudflare Logs, můžete vidět tyto 504 odpovědi s RequestSource z edgeWorkerCacheAPI. I to je očekávané chování, pokud asset v cache chyběl nebo mu vypršela platnost. Mějte na paměti, že edgeWorkerCacheAPI požadavky jsou již odfiltrované v jiných zobrazeních, jako je Cache Analytics. Chcete-li tyto požadavky odfiltrovat nebo filtrovat požadavky pouze od koncových uživatelů vašeho webu, přečtěte si Filtrování koncových uživatelů.
Delete
cache.delete(request, options);delete(request, options): Promise<boolean>
Odstraní Response objekt z mezipaměti a vrátí Promise pro booleovskou odpověď:
true: Odpověď byla uložena do mezipaměti, ale nyní je smazánafalse: Odpověď nebyla v okamžiku mazání v mezipaměti.
Parametry
-
requeststring | Request- Řetězec nebo
Requestobjekt použitý jako vyhledávací klíč. Řetězce jsou interpretovány jako URL pro novýRequestobjekt.
- Řetězec nebo
-
optionsobjekt- Může obsahovat jednu možnou vlastnost:
ignoreMethod(Boolean). Metodu požadavku považujte za GET bez ohledu na její skutečnou hodnotu.
- Může obsahovat jednu možnou vlastnost: