Použití Azure CDN s CORS

Co je CORS?

CORS (sdílení prostředků mezi zdroji) je funkce HTTP, která umožňuje webové aplikaci spuštěné v jedné doméně přistupovat k prostředkům v jiné doméně. Aby se snížila možnost skriptování mezi weby, všechny moderní webové prohlížeče implementují omezení zabezpečení označované jako zásady stejného původu. Toto omezení brání webové stránce v volání rozhraní API v jiné doméně. CORS poskytuje bezpečný způsob, jak umožnit jednomu zdroji (původní doméně) volat rozhraní API v jiném zdroji.

Jak to funguje

Existují dva typy požadavků CORS, jednoduché požadavky a složité požadavky.

Pro jednoduché požadavky:

  1. Prohlížeč odešle požadavek CORS s další hlavičkou požadavku HTTP origin . Hodnota hlavičky požadavku je původ, který obsluhoval nadřazenou stránku, která je definována jako kombinace protokolu, domény a portu.HTTPS://www.contoso.com Při pokusu o přístup k datům uživatele v fabrikam.com původu se do fabrikam.com odešle následující hlavička požadavku:

    Origin: https://www.contoso.com

  2. Server může odpovědět některou z následujících hlaviček:

    • Hlavička Access-Control-Allow-Origin v odpovědi označující, který zdrojový web je povolený. Příklad:

      Access-Control-Allow-Origin: https://www.contoso.com

    • Kód chyby HTTP, například 403, pokud server po kontrole hlavičky Origin nepovoluje požadavek mezi zdroji

    • Hlavička Access-Control-Allow-Origin se zástupným znakem, který umožňuje všechny zdroje:

      Access-Control-Allow-Origin: *

U složitých požadavků:

Složitý požadavek je žádost CORS, ve které se před odesláním skutečné žádosti CORS vyžaduje prohlížeč k odeslání předběžného požadavku (tj. předběžné sondy). Předběžný požadavek se zeptá na oprávnění serveru, pokud původní požadavek CORS může pokračovat a jedná se o požadavek na stejnou OPTIONS adresu URL.

Tip

Další podrobnosti o tocích CORS a běžných nástrahách najdete v průvodci CORS pro rozhraní REST API.

Scénáře se zástupným znakem nebo jedním původem

CORS v Azure CDN funguje automaticky bez dalších konfigurací, pokud je hlavička Access-Control-Allow-Origin nastavená na zástupný znak (*) nebo jeden zdroj. SÍŤ CDN ukládá první odpověď do mezipaměti a následné požadavky používají stejnou hlavičku.

Pokud už byly požadavky do CDN před nastavením CORS ve vašem zdroji provedeny, musíte obsah obsahu koncového bodu vyprázdnit, aby se obsah znovu načítá pomocí hlavičky Access-Control-Allow-Origin .

Scénáře s více zdroji

Pokud potřebujete povolit konkrétní seznam původů pro CORS, je to trochu složitější. K tomuto problému dochází, když CDN ukládá do mezipaměti hlavičku Access-Control-Allow-Origin pro první zdroj CORS. Pokud jiný zdroj CORS provede následný požadavek, cdN obsluhuje hlavičku Access-Control-Allow-Origin uloženou v mezipaměti, která se neshoduje. Existuje několik způsobů, jak tento problém opravit.

Standardní profily Azure CDN

Ve službě Azure CDN Standard od Microsoftu můžete vytvořit pravidlo v modulu standardních pravidel a zkontrolovat hlavičku Origin v požadavku. Pokud se jedná o platný zdroj, vaše pravidlo nastaví hlavičku Access-Control-Allow-Origin s požadovanou hodnotou. V tomto případě se hlavička Access-Control-Allow-Origin ze serveru původu souboru ignoruje a modul pravidel CDN zcela spravuje povolené zdroje CORS.

Příklad pravidel s modulem standardních pravidel

Tip

Do pravidla můžete přidat další akce, které upraví další hlavičky odpovědi, například metody Access-Control-Allow-Methods.

Azure CDN Premium z Edgio

Pomocí modulu pravidel Edgio Premium musíte vytvořit pravidlo pro kontrolu hlavičky Origin v požadavku. Pokud se jedná o platný zdroj, vaše pravidlo nastaví hlavičku Access-Control-Allow-Origin s původem zadaným v požadavku. Pokud zdroj zadaný v hlavičce Origin není povolený, pravidlo by mělo vynechat hlavičku Access-Control-Allow-Origin , která způsobí, že prohlížeč žádost odmítne.

Existují dva způsoby, jak tento problém vyřešit pomocí modulu pravidel Premium. V obou případech se hlavička Access-Control-Allow-Origin ze serveru původu souboru ignoruje a modul pravidel CDN zcela spravuje povolené zdroje CORS.

Jeden regulární výraz se všemi platnými zdroji

V tomto případě vytvoříte regulární výraz, který obsahuje všechny původy, které chcete povolit:

https?:\/\/(www\.contoso\.com|contoso\.com|www\.microsoft\.com|microsoft.com\.com)$

Tip

Azure CDN Premium z Edgio používá jako modul regulárních výrazů regulární výrazy kompatibilní s perl. K ověření regulárního výrazu můžete použít nástroj, jako je regulární výraz 101 . Všimněte si, že znak "/" je platný v regulárních výrazech a nemusí být uvozován, ale uvozování daného znaku se považuje za osvědčený postup a očekává se některými validátory regulárních výrazů.

Pokud regulární výraz odpovídá, nahradí vaše pravidlo hlavičku Access-Control-Allow-Origin (pokud existuje) ze zdroje zdrojem, který požadavek odeslal. Můžete také přidat další hlavičky CORS, například metody Access-Control-Allow-Methods.

Příklad pravidel s regulárním výrazem

Pravidlo hlavičky požadavku pro každý zdroj

Místo regulárních výrazů můžete místo regulárních výrazů vytvořit samostatné pravidlo pro každý zdroj, který chcete povolit pomocí podmínky shody se zástupnými výjimkou hlavičky požadavku. Stejně jako u metody regulárního výrazu nastaví samotný modul pravidel hlavičky CORS.

Příklad pravidel bez regulárního výrazu

Tip

V příkladu použití zástupného znaku * říká modulu pravidel, aby odpovídal http i HTTPS.