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