← Cloudflare Cache / cache / concepts
Origin Cache Control
Origin Cache Control je funkce Cloudflare. Pokud je zapnutá na webu zákazníka s plánem Enterprise, znamená to, že Cloudflare má striktně respektovat Cache-Control direktiv přijatých z origin serveru. U zákazníků na plánech Free, Pro a Business je tato funkce ve výchozím nastavení zapnutá.
Cache-Control direktivy v odpovědi HTTP z vašeho origin serveru poskytují konkrétní pokyny pro cachování ↗ zprostředkující služby, jako je Cloudflare.
Se zapnutou funkcí Origin Cache Control Cache-Control direktivy přítomné v odpovědi origin serveru se dodrží přesně podle zadání. Pokud odpověď obsahuje například max-age direktivou s hodnotou 3,600 sekund uloží Cloudflare prostředek do mezipaměti na tuto dobu a teprve poté znovu zkontroluje origin server, zda nedošlo ke změnám.
Cloudflare Cache Rules umožňuje uživatelům doplnit nebo přepsat nastavení origin serveru Cache-Control hlaviček nebo výchozí zásady nastavená Cloudflare.
Následující části se věnují:
- Nejčastější
Cache-Controldirektivy. - Jak aktivovat Origin Cache Control.
- Jak se Origin Cache Control chová s
Cache-Controldirektivy. - Jak ostatní produkty Cloudflare spolupracují s
Cache-Controldirektivy.
Cache-control direktivy
Cache-Control hlavička může obsahovat řadu direktiv, přičemž direktiva určuje, kdo smí daný zdroj ukládat do mezipaměti a jak dlouho ho lze v mezipaměti uchovávat, než je nutné ho aktualizovat.
Pokud je předáno více direktiv společně, jednotlivé direktivy se oddělují čárkou. Pokud direktiva přijímá argument, následuje za direktivou a je oddělen znaménkem rovná se. Příklad: max-age=86400.
Direktivy lze rozdělit do čtyř skupin: cachovatelnost, vypršení platnosti, revalidace, a ostatní.
Možnost ukládání do mezipaměti
Možnost ukládání do mezipaměti určuje, zda by daný prostředek měl vstoupit do mezipaměti, a direktivy uvedené níže tuto možnost prostředku signalizují.
public: znamená, že odpověď smí uložit jakákoli mezipaměť, i když by za normálních okolností nebyla ukládána do mezipaměti nebo by byla ukládána pouze v privátní mezipaměti.private: znamená, že odpověď je určena pro jediného uživatele, například pro mezipaměť prohlížeče, a nesmí být uložena sdílenou mezipamětí, jako je Cloudflare nebo firemní proxy.no-store: znamená, že žádná mezipaměť, například mezipaměť klienta nebo proxy, nesmí uložit žádnou část daného požadavku ani odpovědi.
Vypršení platnosti
Vypršení platnosti udává, jak dlouho má prostředek zůstat v mezipaměti, a níže uvedené direktivy ovlivňují dobu, po kterou v ní zůstává.
max-age=seconds: znamená, že odpověď je neaktuální poté, co její stáří přesáhne uvedený počet sekund. Stáří je definováno jako doba v sekundách od okamžiku, kdy byl objekt doručen ze serveru originu.secondsje celé číslo bez uvozovek.s-maxage=seconds: znamená, že ve sdílených mezipamětích má maximální stáří určené touto direktivou přednost před maximálním stářím určeným buďmax-agedirektiva neboExpirespole hlavičky.s-maxagedirektiva zároveň zahrnuje význam direktivyproxy-revalidatedirektiva odpovědi. Prohlížeče ignorujís-maxage.
no-cache: znamená, že odpověď nelze použít k vyřízení dalšího požadavku bez úspěšné validace na serveru originu. Server originu tak může zabránit tomu, aby mezipaměť vyřídila požadavek bez kontaktování originu, a to i v případě mezipamětí nakonfigurovaných k odesílání neaktuálních odpovědí.
Zajistěte, aby HTTP Expires hlavička je na vašem origin serveru nastavena tak, aby používala greenwichský čas (GMT), jak stanovuje RFC 2616 ↗.
Revalidace
Revalidace určuje, jak se má mezipaměť chovat po vypršení platnosti prostředku, a níže uvedené direktivy toto chování ovlivňují.
must-revalidate: znamená, že jakmile je zdroj neaktuální, mezipaměť (klienta nebo proxy) nesmí odpověď použít k vyřízení dalších požadavků bez úspěšné validace na serveru originu.proxy-revalidate: má stejný význam jakomust-revalidatedirektiva odpovědi, až na to, že se nevztahuje na privátní cache klienta.stale-while-revalidate=<seconds>: pokud je přítomna v odpovědi HTTP, znamená, že mezipaměti smí odpověď, ve které se vyskytuje, doručovat i po jejím zneplatnění, a to až do uvedeného počtu sekund od vypršení platnosti zdroje. Pokud Always Online je povolena, pakstale-while-revalidateastale-if-errordirektivy se ignorují. Tato direktiva není podporována při použití metod Cache APIcache.matchnebocache.put. Další informace najdete v Dokumentace Workers pro Cache API.
stale-if-error=<seconds>: znamená, že při výskytu chyby lze k vyřízení požadavku použít neaktuální uloženou odpověď bez ohledu na jiné informace o aktuálnosti. Chcete-li tomuto chování zabránit, uveďtestale-if-error=0direktivu s objektem vráceným z originu. Tato direktiva není podporována při použití metod Cache APIcache.matchnebocache.put. Další informace najdete v Dokumentace Workers pro Cache API.
stale-if-error direktiva se ignoruje, pokud Always Online je povolena nebo pokud je předána explicitní direktiva v rámci protokolu. Příkladem explicitní direktivy v rámci protokolu je no-store nebo no-cache cache direktiva, must-revalidate cache-response-directive, nebo použitelnou s-maxage nebo proxy-revalidate cache-response-directive.
Ostatní
Níže jsou uvedeny další direktivy, které ovlivňují chování mezipaměti.
no-transform: znamená, že mezilehlý prvek, bez ohledu na to, zda implementuje mezipaměť, nesmí obsah odpovědi nijak transformovat.vary: Cloudflare ve výchozím nastavení nebere hodnoty vary v úvahu při rozhodování o ukládání do mezipaměti. Hodnoty vary se respektují, pokud nakonfigurujete Nastavení Vary v Cache Rules, když Vary pro obrázky je nakonfigurováno a když je hlavička varyvary: accept-encoding.immutable: sděluje klientům, že se tělo odpovědi v čase nemění. Pokud zdroj nevypršel, na serveru se nezměnil. Uživatel by neměl odesílat podmíněný revalidační požadavek, jako jeIf-None-MatchneboIf-Modified-Since, aby zkontroloval aktualizace, i když uživatel stránku výslovně obnoví. Tato direktiva nemá žádný vliv na veřejné cache, jako je Cloudflare, ale mění chování prohlížeče.
Seznamte se s no-store a no-cache direktivy
Mezi direktivami Cache-Control: no-store a Cache-Control: no-cache, zejména pokud jde o to, jak ovlivňují ukládání do cache v prohlížeči a funkce jako Back-Forward Cache ↗ (BFCache).
no-store
- Sděluje prohlížečům i zprostředkovatelům (jako jsou CDN), aby za žádných okolností neukládali kopii odpovědi.
- Odpověď se nikdy nezapisuje na disk ani do paměti, takže si ji prohlížeč musí pokaždé znovu vyžádat.
- V mnoha prohlížečích
no-storevypíná BFCache, protože obnovení stránky z BFCache vyžaduje, aby si prohlížeč uchoval kopii stavu paměti stránky, což je v rozporu s direktivou „do not store“. - Tato direktiva se používá pro vysoce citlivá nebo dynamická data (například bankovní aplikace, osobní údaje, zabezpečené dashboardy).
no-cache
- Umožňuje uložit odpověď (jak v prohlížeči, tak v mezilehlých mezipamětech), ale před jejím použitím vyžaduje opětovné ověření u origin serveru.
- Díky tomu je obsah vždy aktuální a zároveň zůstává zachována možnost využít BFCache nebo jiné formy optimalizace výkonu.
- Tato direktiva se používá pro data, která se často mění, ale nejsou citlivá, a lze je rychleji obsloužit ověřením platnosti než opětovným stažením.
Další informace o chování těchto direktiv při zapnuté nebo vypnuté funkci Origin Cache Control najdete v části Direktivy sekce.
Zapnutí Origin Cache Control
Pokud aktivujete Origin Cache Control, Cloudflare se bude snažit striktně dodržovat RFC 7234 ↗. Zákazníci na plánu Enterprise mají možnost zvolit, zda se Cloudflare bude tímto chováním řídit, a mohou funkci Origin Cache Control pro své weby povolit nebo zakázat pomocí cache rules v dashboard nebo přes API. Zákazníci na plánech Free, Pro a Business mají tuto možnost ve výchozím nastavení povolenou a nemohou ji vypnout.
Chování Origin Cache Control
Následující část se věnuje direktivám a podmínkám chování souvisejícím se zapnutím nebo vypnutím Origin Cache Control.
Direktivy
Tabulka níže uvádí direktivy a jejich chování při vypnuté a zapnuté funkci Origin Cache Control.
| Direktiva | Chování při vypnutí Origin Cache Control | Chování při zapnutí Origin Cache Control |
|---|---|---|
s-maxage=0 |
Neuloží do mezipaměti. | Ukládá do mezipaměti a vždy ji znovu ověřuje |
max-age=0 |
Neuloží do mezipaměti. | Ukládá do mezipaměti a vždy ji znovu ověřuje. |
no-cache |
Neuloží do mezipaměti. | Ukládá do mezipaměti a vždy ji znovu ověřuje. Neposkytuje zastaralý obsah. |
no-cache=<headers> |
Neuloží do mezipaměti. | Ukládá do mezipaměti, pokud hlavičky uvedené v no-cache=<headers> neexistují. Vždy znovu ověří platnost, pokud je přítomna některá z hlaviček uvedených v no-cache=<headers> je přítomen. |
Private=<headers> |
Neuloží do mezipaměti. | Neukládá do cache <headers> hodnoty uvedené v Private=<headers> direktiva. |
must-revalidate |
Direktiva cache se ignoruje a podá se neaktuální obsah. | Neposkytuje zastaralý (stale) obsah. Vyžaduje revalidaci pro CDN i pro prohlížeč. |
proxy-revalidate |
Direktiva cache se ignoruje a podá se neaktuální obsah. | Neposkytuje zastaralý (stale) obsah. Vyžaduje revalidaci pro CDN, ale ne pro prohlížeč. |
no-transform |
Může provést (de)kompresi Gzip, použít Polish, e-mailový filtr atd. | Nezmění tělo odpovědi. |
s-maxage=delta, delta>1 |
Stejné jako max-age. |
Max-age a proxy-revalidate. |
immutable |
Není dále proxováno. | Předáváno proxy downstream. Směrem k prohlížeči, neovlivňuje cachovací proxy. |
no-store |
Neuloží do mezipaměti. | Neuloží do mezipaměti. |
Podmínky
Chování Origin Cache Control při zapnutí i vypnutí ovlivňují i některé další scénáře.
Podmínka | chování při vypnutí Origin Cache Control | chování při zapnutí Origin Cache Control | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Přítomnost | Obsah může být uložen do mezipaměti. | Obsah se do mezipaměti uloží pouze v případě, že | ||||||||||||
Použití | V protokolech | V protokolech | ||||||||||||
Odpověď originu obsahuje | Obsah může být uložen do mezipaměti s odstraněnými | Obsah se do mezipaměti neukládá. | ||||||||||||
Je nastaveno Browser Cache TTL. |
| Pokud origin server vrátí |
Příklady
V následujících příkladech zjistíte, které direktivy použít s Cache-Control hlavičku k řízení konkrétního chování při ukládání do mezipaměti.
Uložení statického prostředku do mezipaměti.
Cache-Control: public, max-age=86400
Zajistěte, aby tajný prostředek nebyl nikdy uložen do cache.
Cache-Control: no-store
Ukládání prostředků do mezipaměti v prohlížečích, ale ne v proxy mezipaměti.
Cache-Control: private, max-age=3600
Ukládání prostředků do klientské i proxy mezipaměti, s upřednostněním revalidace při podání.
Cache-Control: public, no-cache
Ukládání prostředků do proxy mezipaměti, ale s POVINNOU revalidací proxy při podání.
Cache-Control: public, no-cache, proxy-revalidate nebo Cache-Control: public, s-maxage=0
Ukládání prostředků do proxy mezipaměti, ale s POVINNOU revalidací libovolnou mezipamětí při podání.
Cache-Control: public, no-cache, must-revalidate
Ukládání prostředků do mezipaměti, ale se zajištěním, že je proxy neupraví.
Cache-Control: public, no-transform
Tato konfigurace zároveň vypíná transformace, jako je komprese gzip nebo brotli, mezi naší edge sítí a vašimi návštěvníky, pokud byl původní obsah odeslán nekomprimovaný.
Ukládání prostředků do mezipaměti s revalidací, ale s možností podat neaktuální odpověď, pokud je origin server nedostupný.
Cache-Control: public, max-age=3600, stale-if-error=60
S touto konfigurací se Cloudflare pokusí revalidovat obsah s origin serverem poté, co byl v mezipaměti 3600 sekund (jednu hodinu). Pokud server místo řádné odpovědi na revalidaci vrátí chybu, Cloudflare pokračuje v doručování zastaralého prostředku ještě jednu minutu po vypršení jeho platnosti.
Ukládání prostředků do mezipaměti na Cloudflare a v prohlížečích návštěvníků na různě dlouhou dobu.
Cache-Control: public, max-age=7200, s-maxage=3600
Uložení prostředku do mezipaměti a jeho podání při revalidaci.
Cache-Control: max-age=600, stale-while-revalidate=30
Tato konfigurace určuje, že je aktivum čerstvé po dobu 600 sekund. Po dalších až 30 sekund může být obsloužena i jeho neplatná verze, zatímco Cloudflare na pozadí ověřuje aktuálnost aktiva u originu. Další informace najdete v Revalidace.
Interakce s dalšími funkcemi Cloudflare
Tato část popisuje, jak ostatní funkce Cloudflare spolupracují s Cache-Control direktivy.
Edge Cache TTL
Edge Cache TTL Cache Rules mají přednost před s-maxage a případné direktivy pro opětovné ověření zakáže. Pokud je v Cloudflare povoleno Origin Cache Control, původní Cache-Control hlavička projde od naší edge dál ke klientovi, i když je nastaveno přepsání Edge Cache TTL. Pokud je naopak Origin Cache Control v Cloudflare vypnutá, Cloudflare hodnotu Origin Cache Control přepíše.
Browser Cache TTL
Browser Cache TTL Cache Rules mají přednost před max-age nastavení předávaná dále z naší edge sítě, obvykle do prohlížečů vašich návštěvníků.
Polish
Polish je vypnuto, když je no-transform direktiva je přítomna.
Gzip a jiná komprese
Komprese je vypnutá, pokud no-transform direktiva je přítomna. Pokud je původní prostředek stažený z originu komprimovaný, poskytne se návštěvníkovi rovněž komprimovaný. Pokud je původní prostředek nekomprimovaný, komprese se neaplikuje.
JavaScript Detections
JavaScript Detections vkládání je vypnuté, když je no-transform direktiva je přítomna. cf.bot_management.js_detection.passed pole se zobrazí jako missing pro dotčené požadavky.