← Cloudflare Cache / cache / concepts
Vary
Vary ↗ hlavička odpovědi HTTP říká Cloudflare, že origin server může pro stejnou URL adresu poskytovat různé odpovědi v závislosti na hlavičkách požadavku. Origin server může například poskytovat různé jazykové verze na základě Accept-Language, nebo různé formáty obsahu na základě Accept.
CDN Cloudflare ve výchozím nastavení sestavuje cache keys z URL požadavku a několika konkrétních hlaviček. Cache Rules může předem přidat další vlastnosti požadavku do klíče mezipaměti. Vary hlavička odpovědi umožňuje originu rozhodnout, které hlavičky požadavku jsou důležité, když Cloudflare odpověď přijme.
Tato stránka vysvětluje, jak Vary ovlivňuje cachování. Pro konfiguraci Vary použijte Vary v nastavení Cache Rules, nebo cf.vary pro subrequesty Workers.
Tato funkce se liší od Vary pro obrázky, která poskytuje varianty formátu obrázku na základě Accept hlavičku prostřednictvím samostatného pravidla pro varianty cache.
Dostupnost
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| Dostupnost | Ano | Ano | Ano | Ano |
Jak Vary ovlivňuje cache keys
Když Cloudflare uloží do mezipaměti odpověď s Vary hlavičky se uvedené hlavičky požadavku stanou součástí cache key pro danou odpověď, v souladu s chováním ukládání do mezipaměti HTTP popsaným v RFC 9111 ↗. Stejná URL adresa pak může mít více verzí uložených v mezipaměti, přičemž každá je vybrána podle hodnot hlaviček požadavku uvedených v Vary odpověď.
Cloudflare nerozlišuje varianty každé cachované odpovědi jen proto, že je v Cache Rule nastavené Vary. Odpověď originu musí obsahovat Vary hlavičku. Cloudflare poté pro každou uvedenou hlavičku použije nakonfigurovanou akci a rozhodne, která hodnota hlavičky požadavku se přidá do cache key.
Předpokládejme například, že origin server vrátí následující odpověď:
Vary: Accept-Language
Cache-Control: public, max-age=3600Tím Cloudflare sdělíte, že hodnota Accept-Language hlavička požadavku by měla být součástí cache key.
S accept-language nakonfigurováno na normalize, tyto dva požadavky mohou použít stejnou verzi uloženou v cache:
Accept-Language: en-US, fr;q=0.8
Accept-Language: fr;q=0.8, en-GBObě hlavičky požadavku se normalizují na stejné pořadí jazykových preferencí, en,fr. Požadavek s jinou normalizovanou hodnotou, například Accept-Language: fr, en;q=0.8, vytvoří nebo vybere jinou verzi stejné adresy URL uloženou v cache.
Když se odpověď liší podle více hlaviček, Cloudflare zahrne do cache key každou z uvedených hlaviček. Například odpověď s Vary: Accept, Accept-Language používá jak nakonfigurovaný accept hodnotu a nakonfigurovaný accept-language hodnotu k výběru uložené odpovědi.
Pokud odpověď origin serveru neobsahuje Vary hlavičky Cloudflare uloží odpověď do mezipaměti běžným způsobem. Pokud odpověď origin serveru obsahuje Vary název hlavičky nastavený na bypass mezipaměti, Cloudflare danou odpověď neuloží.
Akce
Každá nakonfigurovaná hlavička používá jednu ze tří akcí:
| Akce | Význam | Kdy použít |
|---|---|---|
normalize |
Normalizuje hodnotu hlavičky požadavku před výběrem uložené verze v cache. U vybraných hlaviček může Cloudflare normalizovanou hodnotu předat také origin serveru. | Většina Accept, Accept-Language, a Accept-Encoding případy použití. |
passthrough |
K výběru uložené verze se použije nezpracovaná hodnota hlavičky požadavku. Hlavička se beze změny předává origin serveru. | Když mají bajtové rozdíly v hodnotě hlavičky vytvářet různé verze. |
bypass |
Obejít mezipaměť, když se tento název hlavičky objeví v originem odeslané Vary odpověď. |
Hlavičky s příliš mnoha možnými hodnotami, hodnotami specifickými pro jednotlivé uživatele nebo hodnotami, které nechcete ukládat do mezipaměti. |
Normalize
normalize snižuje počet zbytečných cachovaných verzí tím, že rovnocenné hodnoty hlaviček požadavku převede na stejnou hodnotu cache key.
Například tyto dva Accept hlaviček se mohou normalizovat na stejnou hodnotu:
Accept: text/html, application/json;q=0.9
Accept: application/json;q=0.9, text/htmlPassthrough
passthrough používá při výběru uložené verze nezpracovanou hodnotu hlavičky požadavku. Sémanticky rovnocenné hodnoty mohou stále vytvářet různé uložené verze, pokud se liší na úrovni bajtů.
Například v části passthrough, tyto dva požadavky vyberou různé verze uložené v cache:
Accept: text/html, application/json
Accept: application/json, text/htmlPoužijte passthrough pouze pokud na přesné hodnotě hlavičky záleží vašemu origin serveru a měla by záležet i mezipaměti.
Bypass
bypass říká Cloudflare, aby odpověď neukládal do mezipaměti, když má origin Vary odpověď obsahuje tento název hlavičky.
Pokud vaše konfigurace například nastavuje user-agent na bypass, odpověď s touto hlavičkou se do cache neukládá:
Vary: User-AgentChování normalizace
Normalizace Vary je normalizace, která se provede, když je nakonfigurovanou akcí normalize. Ovlivňuje to, jak Cloudflare vybírá verzi uloženou v mezipaměti, a u některých hlaviček i to, co Cloudflare předává origin serveru.
Normalizace je volitelná, ale pro většinu nasazení doporučená, protože snižuje počet verzí uložených v cache a zlepšuje poměr zásahů v cache.
Když je akcí hlavičky normalize, Cloudflare použije normalizovanou hodnotu k výběru verze uložené v cache. Normalizace může být ztrátová: může měnit pořadí hodnot, odstraňovat hodnoty kvality, převádět hodnoty na malá písmena nebo odstraňovat položky, které nejsou v nakonfigurovaném seznamu povolených hodnot.
Hlavičky požadavků na origin
Pro Accept, Accept-Language, a Accept-Encoding hodnotou Respect Strong ETags zapnuté, Cloudflare může normalizovanou hodnotu hlavičky přeposlat i na origin. Díky tomu odpovídá odpověď generovaná originem hodnotě klíče mezipaměti, kterou Cloudflare při ukládání do mezipaměti používá.
Například pokud accept-language normalizuje tyto dva požadavky na en,fr, Cloudflare předává Accept-Language: en,fr na origin při cache miss nebo revalidaci:
Accept-Language: en-US, fr;q=0.8
Accept-Language: fr;q=0.8, en-GBPředání normalizované hodnoty zabraňuje tomu, aby Cloudflare uložil odpověď vygenerovanou pro jednu neupravenou hodnotu hlavičky pod obecnější normalizovanou hodnotou, kterou by později mohl nesprávně použít jiný požadavek.
Tento přepis origin požadavku se vztahuje na:
AcceptAccept-LanguageAccept-Encoding, pouze pokud je zapnuté Respect Strong ETags
Tento přepis se nevztahuje na:
- Hlavičky nakonfigurované jako
passthrough - Hlavičky nakonfigurované jako
bypass - Ostatní obecné hlavičky
K tomuto přepisu dochází ještě předtím, než Cloudflare obdrží odpověď origin serveru, takže vychází z vaší konfigurace Cache Rule. Pokud Accept, Accept-Language, nebo Accept-Encoding je nakonfigurováno s normalize, Cloudflare tuto hlavičku požadavku při přeposílání na origin server přepíše, i když ji origin server ve své odpovědi nakonec neuvede v Vary. Výběr mezipaměti a její obcházení stále závisí na Vary hlavička.
Pokud normalizace zredukuje hlavičku na prázdnou hodnotu, například proto, že žádná z hodnot požadavku neodpovídá nakonfigurované media_types nebo languages seznamu, Cloudflare tuto hlavičku z požadavku na origin server odstraní.
Accept
Cloudflare normalizuje Accept hlavičku požadavku v následujících krocích:
- Převeďte typy MIME na malá písmena.
- Odebrat volitelné bílé znaky.
- Seřaďte typy MIME podle hodnoty kvality. Typy se stejnou hodnotou kvality jsou seřazeny abecedně.
- Odebrat parametry.
Hodnoty kvality se používají k řazení a poté se odstraní z normalizované hodnoty. q=0 zůstává zachována, protože znamená "nepřijatelné" a měla by zůstat odlišitelná od hodnoty s nízkou prioritou.
Můžete zadat volitelný media_types seznamu. Pokud je seznam zadán, jakýkoli typ MIME, který v něm není uveden, se z normalizované hodnoty odstraní.
Accept-Language
Cloudflare normalizuje Accept-Language hlavičku požadavku v následujících krocích:
- Převeďte jazyky na malá písmena.
- Odebrat volitelné bílé znaky.
- Seřaďte jazyky podle hodnoty kvality. Jazyky se stejnou hodnotou kvality jsou seřazeny abecedně.
- Odebrat parametry.
- Odeberte varianty regionu. Například
en-USse změní naen. Pokud existuje více regionálních variant stejného jazyka, sloučí se do jedné položky.
Hodnoty kvality se používají k řazení a poté se odstraní z normalizované hodnoty. q=0 zůstává zachována, protože znamená "nepřijatelné" a měla by zůstat odlišitelná od hodnoty s nízkou prioritou.
Můžete zadat volitelný languages seznamu. Pokud je seznam zadán, jakýkoli jazyk, který v něm není uveden, se z normalizované hodnoty odstraní. Pokud položka seznamu určuje regionální variantu a v hlavičce požadavku existuje odpovídající položka, regionální varianta zůstane v normalizované hodnotě zachována.
Accept-Encoding
CDN Cloudflare ve výchozím nastavení přepisuje Accept-Encoding hlavičku podle povolených kódování komprese. Pokud je povolena komprese Brotli, Accept-Encoding předaná do originu je gzip, br. Pokud komprese Brotli není povolena, Accept-Encoding předaná do originu je gzip. Cloudflare pak může znovu komprimovat prostředky uložené v mezipaměti podle Accept-Encoding. Podrobnosti najdete v Hlavičky ETag.
Toto chování lze vypnout zapnutím Respect Strong ETags. Když je povoleno Respect Strong ETags, Accept-Encoding se předá na origin server místo přepsání komprese ze strany Cloudflare. Pokud je normalizace hlavičky Vary povolena pro Accept-Encoding, normalizovaná hodnota se použije jak k výběru verze uložené v cache, tak jako hodnota předaná origin serveru.
Protože Cloudflare řídí Accept-Encoding když je nastavení Respect Strong ETags vypnuté, Accept-Encoding normalizace přepisuje požadavek na origin server pouze tehdy, když je zapnuta možnost Respect Strong ETags.
Cloudflare normalizuje Accept-Encoding hlavičku požadavku v následujících krocích:
- Převeďte kódování na malá písmena.
- Odebrat volitelné bílé znaky.
- Seřaďte kódování podle hodnoty kvality. Kódování se stejnou hodnotou kvality jsou seřazena abecedně.
- Odebrat parametry.
Hodnoty kvality se používají k řazení a poté se odstraní z normalizované hodnoty. q=0 zůstává zachována, protože znamená "nepřijatelné" a měla by zůstat odlišitelná od hodnoty s nízkou prioritou.
Ostatní hlavičky
Pro jakoukoli jinou hlavičku než Accept, Accept-Language, a Accept-Encoding, Cloudflare nezná sémantiku daného pole. Normalizace se omezuje na transformace, které jsou bezpečné pro libovolnou hlavičku:
- Více řádků s poli hlavičky pro stejnou hlavičku se sloučí do jedné hodnoty oddělené čárkami, a to v pořadí, ve kterém byly přijaty.
- Volitelné bílé znaky kolem každé hodnoty se odstraní.
Hodnoty se nepřeskupují, nepřevádí na malá písmena, neodstraňují se u nich duplicity ani se jinak neupravují, protože pořadí a obsah libovolné hlavičky mohou být významné.
Například tyto dva řádky hlavičky:
X-Custom-Header: Value2
X-Custom-Header: Value1Při výběru verze uložené v mezipaměti Cloudflare tyto hodnoty kombinuje jako Value2,Value1. Hlavička předávaná origin serveru se nepřepisuje.
Chování vymazávání
Vymazání URL adresy vymaže všechny cachované verze dané URL adresy. Není nutné odesílat samostatný vymazání požadavek pro každý Vary hodnotu hlavičky. To platí pro metody purge, které cílí na konkrétní objekt v cache, jako je purge podle URL, tagu, hostname, prefixu nebo purge everything.
Změna konfigurace Vary sama o sobě neznamená vymazání obsahu z mezipaměti. Protože nová konfigurace Vary může změnit způsob výběru uložených verzí, mohou požadavky až do vypršení platnosti nebo vymazání starých položek mezipaměti minout mezipaměť a znovu ji naplňovat podle nových cache keys.