Az Azure CDN és a CORS használata

Mi az a CORS?

A CORS (forrásközi erőforrás-megosztás) egy HTTP-szolgáltatás, amely lehetővé teszi, hogy az egyik tartományban futó webalkalmazás hozzáférjen egy másik tartomány erőforrásaihoz. A helyek közötti szkriptelési támadások lehetőségének csökkentése érdekében minden modern webböngésző egy azonos eredetű szabályzatként ismert biztonsági korlátozást vezet be. Ez a korlátozás megakadályozza, hogy egy weblap más tartományban hívja meg az API-kat. A CORS biztonságos módot biztosít arra, hogy az egyik forrás (a forrástartomány) meghívhassa az API-kat egy másik forrásban.

Működés

A CORS-kérelmeknek két típusa van, az egyszerű kérések és az összetett kérések.

Egyszerű kérések esetén:

  1. A böngésző a CORS-kérést egy extra Origin HTTP-kérés fejlécével küldi el. A kérelem fejlécének értéke a szülőoldalt kézbesítő forrás, amely a protokoll, a tartomány és a port kombinációjaként van definiálva. Ha egy lap HTTPS://www.contoso.com megpróbál hozzáférni egy felhasználó adataihoz a fabrikam.com forrásban, a következő kérésfejlécet küldi el a rendszer fabrikam.com:

    Origin: https://www.contoso.com

  2. A kiszolgáló a következő fejlécek bármelyikével válaszolhat:

    • Egy Access-Control-Allow-Origin fejléc a válaszában, amely azt jelzi, hogy melyik forráshely engedélyezett. Példa:

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

    • HTTP-hibakód, például 403, ha a kiszolgáló nem engedélyezi a forrásközi kérést az Origin fejléc ellenőrzése után

    • Access-Control-Allow-Origin fejléc egy helyettesítő karakterrel, amely lehetővé teszi az összes forrást:

      Access-Control-Allow-Origin: *

Összetett kérelmek esetén:

Az összetett kérés egy CORS-kérés, amelyben a böngészőnek elővizsgálati kérelmet (azaz előzetes mintavételt) kell küldenie a tényleges CORS-kérés elküldése előtt. Az elővizsgálati kérés megkérdezi a kiszolgáló engedélyét, hogy az eredeti CORS-kérés folytatható-e, és OPTIONS ugyanahhoz az URL-címhez tartozó kérés.

Tipp.

A CORS-folyamatokkal és a gyakori buktatókkal kapcsolatos további részletekért tekintse meg a CORS for REST API-khoz készült útmutatót.

Helyettesítő vagy egyszeri eredetű forgatókönyvek

Az Azure CDN CORS automatikusan működik további konfigurációk nélkül, ha az Access-Control-Allow-Origin fejléc helyettesítő karakterre (*) vagy egyetlen forrásra van állítva. A CDN gyorsítótárazza az első választ, az azt követő kérések pedig ugyanazt a fejlécet használják.

Ha a CDN-re irányuló kérések már megtörténtek, mielőtt a CORS be lett állítva a forráson, akkor a tartalomnak a végponton való törléséhez újra kell töltenie a tartalmat az Access-Control-Allow-Origin fejléccel.

Több forrásforgatókönyv

Ha engedélyeznie kell egy adott származási listát a CORS-hoz, a dolgok kissé bonyolultabbak lesznek. A probléma akkor fordul elő, ha a CDN gyorsítótárazza az első CORS-forrás Hozzáférés-vezérlés-Engedélyezés-Forrás fejlécét. Ha egy másik CORS-forrás egy későbbi kérést küld, a CDN a gyorsítótárazott Hozzáférés-vezérlés-Engedélyezés-Forrás fejlécet szolgálja ki, amely nem egyezik meg. A probléma többféleképpen is orvosolható.

Standard Azure CDN-profilok

A Microsofttól származó Azure CDN Standardban létrehozhat egy szabályt a Standard szabálymotorban , hogy ellenőrizze a kérés Origin fejlécét. Ha érvényes forrás, a szabály a kívánt értékkel állítsa be az Access-Control-Allow-Origin fejlécet. Ebben az esetben a rendszer figyelmen kívül hagyja a fájl forráskiszolgálójának Access-Control-Allow-Origin fejlécét, és a CDN szabálymotorja teljes mértékben kezeli az engedélyezett CORS-forrásokat.

Példa szabályokra a standard szabálymotorral

Tipp.

További műveleteket is hozzáadhat a szabályhoz további válaszfejlécek, például az Access-Control-Allow-Methods módosításához.

Azure CDN Premium az Edgio-tól

Az Edgio Premium szabálymotor használatával létre kell hoznia egy szabályt , amely ellenőrzi a kérés Origin fejlécét. Ha érvényes forrás, a szabály beállítja az Access-Control-Allow-Origin fejlécet a kérelemben megadott forrással. Ha az Origin fejlécben megadott forrás nem engedélyezett, a szabálynak ki kell hagynia az Access-Control-Allow-Origin fejlécet, ami miatt a böngésző elutasítja a kérést.

Ezt a problémát kétféleképpen lehet megoldani a Prémium szabálymotorral. Mindkét esetben a rendszer figyelmen kívül hagyja a fájl forráskiszolgálójának Access-Control-Allow-Origin fejlécét, és a CDN szabálymotorja teljes mértékben kezeli az engedélyezett CORS-forrásokat.

Egy reguláris kifejezés az összes érvényes forrással

Ebben az esetben egy reguláris kifejezést hoz létre, amely tartalmazza az összes engedélyezni kívánt forrást:

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

Tipp.

Az Edgio-tól származó Azure CDN Premium a Perl-kompatibilis reguláris kifejezéseket használja motorként a reguláris kifejezésekhez. A reguláris kifejezés ellenőrzéséhez használhat olyan eszközt, mint a Regular Expressions 101 . Vegye figyelembe, hogy a "/" karakter érvényes a reguláris kifejezésekben, és nem kell elmenekülni, azonban a karakter elhagyása ajánlott eljárásnak számít, és néhány regex-érvényesítő elvárja.

Ha a reguláris kifejezés egyezik, a szabály lecseréli az Access-Control-Allow-Origin fejlécet (ha van ilyen) a forrásból a kérést küldő forrásra. További CORS-fejléceket is hozzáadhat, például az Access-Control-Allow-Methods metódusokat.

Szabály példa reguláris kifejezéssel

Fejlécszabály kérése minden forráshoz.

A reguláris kifejezések helyett létrehozhat egy külön szabályt minden olyan forráshoz, amelynél engedélyezni szeretné a Kérelemfej helyettesítő karakteregyeztetési feltételét. A reguláris kifejezési módszerhez hasonlóan a szabálymotor önmagában is beállítja a CORS-fejléceket.

Szabály példa reguláris kifejezés nélkül

Tipp.

A példában a helyettesítő karakter * használata arra utasítja a szabálymotort, hogy a HTTP-nek és a HTTPS-nek is megfeleljen.