Aracılığıyla paylaş


Azure CDN'yi CORS ile kullanma

Önemli

Microsoft tarafından sunulan Azure CDN Standard (klasik) 30 Eylül 2027'de kullanımdan kaldırılacaktır. Hizmet kesintisini önlemek için, 30 Eylül 2027'ye kadar Azure CDN Standard'ı Microsoft (klasik) profillerinden Azure Front Door Standard veya Premium katmanına geçirmeniz önemlidir. Daha fazla bilgi için bkz . Microsoft'tan Azure CDN Standard (klasik) kullanımdan kaldırma.

Edgio'dan Azure CDN 15 Ocak 2025'te kullanımdan kaldırılacaktır. Hizmet kesintisini önlemek için iş yükünüzü bu tarihten önce Azure Front Door'a geçirmeniz gerekir. Daha fazla bilgi için bkz . Edgio'dan Azure CDN kullanımdan kaldırma hakkında SSS.

CORS nedir?

CORS (çıkış noktaları arası kaynak paylaşımı), bir etki alanı altında çalışan bir web uygulamasının başka bir etki alanındaki kaynaklara erişmesini sağlayan bir HTTP özelliğidir. Siteler arası betik saldırıları olasılığını azaltmak için, tüm modern web tarayıcıları aynı kaynak ilkesi olarak bilinen bir güvenlik kısıtlaması uygular. Bu kısıtlama, bir web sayfasının farklı bir etki alanındaki API'leri çağırmasını engeller. CORS, bir kaynağın (kaynak etki alanı) başka bir kaynaktaki API'leri çağırmasına izin vermek için güvenli bir yol sağlar.

Nasıl çalışır?

basit istekler ve karmaşık istekler olmak üzere iki tür CORS isteği vardır.

Basit istekler için:

  1. Tarayıcı, fazladan bir Kaynak HTTP isteği üst bilgisi ile CORS isteği gönderir. İstek üst bilgisinin değeri, protokol, etki alanı ve bağlantı noktası birleşimi olarak tanımlanan üst sayfaya hizmet veren kaynaktır. fabrikam.com kaynağındaki bir kullanıcının verilerine erişmeye çalışan bir sayfa HTTPS://www.contoso.com fabrikam.com aşağıdaki istek üst bilgisi gönderilir:

    Origin: https://www.contoso.com

  2. Sunucu aşağıdaki üst bilgilerden herhangi biriyle yanıt verebilir:

    • Yanıtında hangi kaynak siteye izin verildiğini gösteren bir Access-Control-Allow-Origin üst bilgisi. Örneğin:

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

    • Sunucu Kaynak üst bilgisini denetledikten sonra çıkış noktaları arası isteğe izin vermiyorsa 403 gibi bir HTTP hata kodu

    • Tüm çıkış noktalarına izin veren joker karakter içeren bir Access-Control-Allow-Origin üst bilgisi:

      Access-Control-Allow-Origin: *

Karmaşık istekler için:

Karmaşık istek, gerçek CORS isteğini göndermeden önce tarayıcının bir denetim öncesi isteği (yani bir ön araştırma) göndermesi gereken bir CORS isteğidir. Denetim öncesi isteği, özgün CORS isteğinin devam edip etemediğini ve aynı URL'ye yönelik bir OPTIONS istek olup olmadığını sunucu iznini ister.

İpucu

CORS akışları ve yaygın tuzaklar hakkında daha fazla bilgi için REST API'leri için CORS Kılavuzu'na bakın.

Joker karakter veya tek çıkış noktası senaryoları

Azure CDN'de CORS, Access-Control-Allow-Origin üst bilgisi joker karakter (*) veya tek bir kaynak olarak ayarlandığında ek yapılandırmalar olmadan otomatik olarak çalışır. CDN ilk yanıtı önbelleğe alır ve izleyen istekler aynı üst bilgiyi kullanır.

KAYNAĞınızda CORS ayarlanmadan önce CDN'ye istekler zaten yapılmışsa, access-control-allow-origin üst bilgisi ile içeriği yeniden yüklemek için uç nokta içeriğinizdeki içeriği temizlemeniz gerekir.

Birden çok kaynak senaryo

CORS için belirli bir kaynak listesine izin vermeniz gerekiyorsa, işler biraz daha karmaşık hale geliyor. Sorun, CDN ilk CORS kaynağı için Access-Control-Allow-Origin üst bilgisini önbelleğe alırsa oluşur. Farklı bir CORS kaynağı sonraki bir istekte bulunduğunda, CDN önbelleğe alınmış Access-Control-Allow-Origin üst bilgisini sağlar ve bu üst bilgi eşleşmez. Bu sorunu düzeltmenin birkaç yolu vardır.

Azure CDN standart profilleri

Microsoft'tan Azure CDN Standard'da, standart kurallar altyapısında istekte Kaynak üst bilgisini denetlemek için bir kural oluşturabilirsiniz. Geçerli bir kaynaksa, kuralınız Access-Control-Allow-Origin üst bilgisini istenen değerle ayarlar. Bu durumda, dosyanın kaynak sunucusundaki Access-Control-Allow-Origin üst bilgisi yoksayılır ve CDN'nin kural altyapısı izin verilen CORS çıkış noktalarını tamamen yönetir.

Standart kural altyapısı ile kural örneği

İpucu

Access-Control-Allow-Methods gibi ek yanıt üst bilgilerini değiştirmek için kuralınıza ek eylemler ekleyebilirsiniz.

Edgio'dan Azure CDN Premium

Edgio Premium kural altyapısını kullanarak, istekte Kaynak üst bilgisini denetlemek için bir kural oluşturmanız gerekir. Geçerli bir kaynaksa kuralınız Access-Control-Allow-Origin üst bilgisini istekte sağlanan kaynakla ayarlar. Kaynak üst bilgisinde belirtilen kaynak öğesine izin verilmiyorsa kuralınız Access-Control-Allow-Origin üst bilgisini atlar ve bu da tarayıcının isteği reddetmesine neden olur.

Bu sorunu Premium kural altyapısıyla çözmenin iki yolu vardır. Her iki durumda da, dosyanın kaynak sunucusundaki Access-Control-Allow-Origin üst bilgisi yoksayılır ve CDN'nin kural altyapısı izin verilen CORS çıkış noktalarını tamamen yönetir.

Tüm geçerli çıkış noktalarına sahip bir normal ifade

Bu durumda, izin vermek istediğiniz tüm kaynakları içeren bir normal ifade oluşturursunuz:

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

İpucu

Edgio'dan Azure CDN Premium, normal ifadeler için altyapısı olarak Perl Uyumlu Normal İfadeler'i kullanır. Normal ifadenizi doğrulamak için Normal İfadeler 101 gibi bir araç kullanabilirsiniz. "/" karakterinin normal ifadelerde geçerli olduğunu ve kaçış gerekmediğini unutmayın, ancak bu karakterden kaçış en iyi yöntem olarak kabul edilir ve bazı regex doğrulayıcıları tarafından beklenir.

Normal ifade eşleşiyorsa, kuralınız kaynağın Access-Control-Allow-Origin üst bilgisini (varsa) isteği gönderen kaynakla değiştirir. Access-Control-Allow-Methods gibi ek CORS üst bilgileri de ekleyebilirsiniz.

Normal ifade içeren kurallar örneği

Her kaynak için istek üst bilgisi kuralı.

Normal ifadeler yerine, İstek Üst Bilgisi Joker Karakter eşleştirme koşulunun kullanılmasına izin vermek istediğiniz her çıkış noktası için ayrı bir kural oluşturabilirsiniz. Normal ifade yönteminde olduğu gibi, kural altyapısı tek başına CORS üst bilgilerini ayarlar.

Normal ifade içermeyen kurallar örneği

İpucu

Örnekte, * joker karakterinin kullanılması, kural altyapısına hem HTTP hem de HTTPS ile eşleşmesini söyler.