INTEGRITY Dokumentace

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=3600

Tí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-GB

Obě 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/html

Passthrough

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/html

Použ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-Agent

Chová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-GB

Př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:

Tento přepis se nevztahuje na:

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:

  1. Převeďte typy MIME na malá písmena.
  2. Odebrat volitelné bílé znaky.
  3. Seřaďte typy MIME podle hodnoty kvality. Typy se stejnou hodnotou kvality jsou seřazeny abecedně.
  4. 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:

  1. Převeďte jazyky na malá písmena.
  2. Odebrat volitelné bílé znaky.
  3. Seřaďte jazyky podle hodnoty kvality. Jazyky se stejnou hodnotou kvality jsou seřazeny abecedně.
  4. Odebrat parametry.
  5. Odeberte varianty regionu. Například en-US se změní na en. 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:

  1. Převeďte kódování na malá písmena.
  2. Odebrat volitelné bílé znaky.
  3. Seřaďte kódování podle hodnoty kvality. Kódování se stejnou hodnotou kvality jsou seřazena abecedně.
  4. 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:

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: Value1

Př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.