INTEGRITY Dokumentace

Ladění

Pokud se cachování nechová podle očekávání, Cf-Cache-Status hlavička odpovědi je první místo, kam se podívat. Nese ji každá odpověď a její hodnota přesně říká, co se s daným požadavkem stalo.

Zkontrolujte Cf-Cache-Status

Odešlete dva požadavky na stejnou URL adresu a porovnejte hlavičky:

curl -I https://my-worker.example.workers.dev/api/users/42
curl -I https://my-worker.example.workers.dev/api/users/42

Porovnejte hodnotu stavu s níže uvedenými scénáři.

Můj Worker běží při každém požadavku

Cf-Cache-Status chybí. Zkontrolujte, zda máte verzi wrangler 4.69.0 nebo novější a že wrangler.toml nebo wrangler.jsonc obsahuje cache.enabled = true pro daného workera.

Cf-Cache-Status je MISS při každém požadavku, nebo DYNAMIC, nebo BYPASS. Ukládání do cache nic neukládá, nebo se uplatňuje pravidlo pro obejití cache.

Zkontrolujte svůj Cache-Control hlavička. Odpověď musí obsahovat direktivy, díky kterým je možné ji uložit do mezipaměti:

Odpověď s Cache-Control: private nebo no-store se neukládá a Cf-Cache-Status je BYPASS.

Odpověď s Cache-Control: no-cache je uložena, ale Cloudflare považuje každý následující request za zastaralý a před jeho odbavením se dotáže vašeho Workeru. Přesné Cf-Cache-Status závisí na tom, zda stale-while-revalidate je také nastavena:

Pokud chcete dlouhotrvající zásahy v mezipaměti, použijte max-age místo toho. Viz no-cache není obcházením.

Pokud odpověď obsahuje ne Cache-Control hlavičku vůbec, chování závisí na stavovém kódu: Workers Caching použije RFC 9111, heuristická čerstvost a ukládá do mezipaměti výchozí stavové kódy po heuristickou dobu TTL, například 200 je uložena v mezipaměti po dobu 2 hodin a 404 po dobu 3 minut. Úplnou tabulku výchozích hodnot TTL najdete v Odpovědi bez Cache-Control hlavičkou jsou stále ukládány do mezipaměti v referenční dokumentaci ke konfiguraci. Pokud nechcete, aby se použila některá z těchto výchozích hodnot, nastavte Cache-Control explicitně na odpovědi.

Zkontrolujte metodu požadavku. Pouze GET a HEAD požadavky jsou ukládány do mezipaměti. Všechno ostatní je BYPASS. GET a HEAD požadavky na stejnou URL adresu sdílejí stejnou položku v mezipaměti, více informací najdete v Cache keys o tom, jak Cloudflare plní mezipaměť z obou metod.

Zkontrolujte podmínky automatického obejití. Cloudflare cache obchází v těchto případech:

Pokud váš Worker bezpodmínečně nastavuje Set-Cookie (například cookie relace v každé odpovědi), se odpověď nikdy neukládá do mezipaměti. Cookie buď z odpovědí, které lze ukládat do mezipaměti, odstraňte, nebo rozdělte nastavování cookie a ukládané odpovědi do různých tras.

Zkontrolujte stavový kód. Workers Caching se řídí RFC 9111. Odpovědi se stavovými kódy, které nejsou ve výchozím nastavení ukládány do cache (například 401, 403, 500) se neukládají, pokud je výslovně neoznačíte direktivami cacheable.

Několik stavových kódů se nikdy neukládá do cache, a to ani při explicitním Cache-Control:

Můj Worker běží i po prvním požadavku

Cf-Cache-Status je MISS při prvním požadavku, ale přesto MISS u následujících požadavků.

Cache je pravděpodobně rozdělena na části. Klíč mezipaměti zahrnuje cestu požadavku, cílový entrypoint a vlastnost volání ctx.props. Dva požadavky, které vám připadají stejné, mohou vytvořit odlišné cache keys, pokud se liší v některém z těchto ohledů.

Časté příčiny:

Cloudflare v současnosti nezobrazuje složení cache key, takže vypočítaný klíč nelze zobrazit přímo. Místo toho projděte komponenty uvedené v Cache keys a ověřte, že každá z nich je stejná pro oba požadavky.

Po nasazení mi kleslo cache hit rate

To je s výchozí konfigurací očekávané chování. Ve výchozím nastavení Verze Workeru je součástí klíče cache, takže každá nová verze začíná se studenou cache a nemůže znovu použít odpovědi uložené v cache předchozí verze. První požadavky po nasazení jsou promeškané (miss), zatímco se cache nové verze plní, poté se míra zásahů (hit rate) obnoví.

Pokud nasazujete často a vaše odpovědi se mezi nasazeními mění jen zřídka, povolte cache.cross_version_cache pro sdílení uložených odpovědí mezi verzemi a zamezení resetování mezipaměti při každém nasazení. Nevýhodou je, že změny ovlivňující mezipaměť se neprojeví okamžitě, více informací najdete níže.

Moje cache i po nasazení stále vrací starý obsah

Ve výchozím nastavení se nasazení projeví okamžitě, protože verze Workeru je součástí cache klíče a nová verze začíná se studenou cache. Pokud stále vidíte odpovědi z předchozí verze, máte cache.cross_version_cache zapnuto, což sdílí položky uložené v cache napříč verzemi. Aby se nasazení projevilo okamžitě a přitom zůstalo zachováno cross_version_cache při:

Moje cache se po změně obsahu nikdy neaktualizuje

Pokud se data na originu změnila, ale požadavky stále vrací zastaralý obsah:

Dva volající obdrží odpovědi uložené v mezipaměti toho druhého

K tomu by nemělo dojít, pokud používáte ctx.props pro autorizační kontext podle jednotlivých volajících. Pokud ano, platí jedno z následujícího:

Cf-Cache-Status: UPDATING se objevuje neustále

UPDATING znamená, že odpověď byla doručena z cache, přestože byla zastaralá, a váš Worker na pozadí běží, aby ji obnovil. Toto chování je očekávané při použití stale-while-revalidate.

Pokud se zobrazí UPDATING častěji, než byste čekali:

Cf-Cache-Status: UPDATING se nikdy nezobrazí

UPDATING se generuje pouze tehdy, když all z následujícího platí:

Pokud je některá z těchto podmínek nepravdivá, požadavky na zastaralé záznamy se místo toho zpracují pomocí inline revalidace, což vede k EXPIRED (Worker vrátil nové tělo odpovědi) nebo REVALIDATED (Worker vrátil 304 Not Modified).

Časté důvody UPDATING se neobjeví:

Cf-Cache-Status: STALE se objevuje neočekávaně

STALE znamená, že Cloudflare doručil dříve uloženou odpověď z cache, protože při požadavku, který by ji obnovil, došlo u vašeho Workeru k chybě, například Worker vyvolal výjimku, vypršel časový limit nebo vrátil 5xx odpověď. Toto je stale-if-error chování. Více informací najdete v Poskytování zastaralého obsahu při chybě pomocí stale-if-error.

Pokud se zobrazí STALE a neočekávali jste to:

Chcete-li odlišit STALE z běžného HIT v klientské observabilitě zaznamenejte Cf-Cache-Status společně s odpovědí, STALE je jediným signálem, že Worker selhává a klienti to nevidí.

Moje odpověď je větší než limit velikosti

Pokud je odpověď na uložení do cache příliš velká, Cloudflare ji neuloží. Zobrazí se Cf-Cache-Status: MISS při každém požadavku, i když odpověď jinak vypadá jako uložitelná do mezipaměti.

Limity velikosti odpovědi podle plánu najdete v Limity velikosti pro ukládání do mezipaměti. Vezměte na vědomí, že při spuštění všechny odpovědi Workers Caching podléhají limitu velikosti platného pro plán Free, viz Velikost odpovědi s podrobnostmi.

Potřebuji větší přehled

Při spuštění jsou hlavními nástroji pro ladění Cf-Cache-Status hlavičku odpovědi a informace o zásahu do mezipaměti pro jednotlivá volání v Přehledový panel pozorovatelnosti Workers.