Kaynaklar Arası Paylaşım (CORS)

UYGULANANLAR: Tüm API Management katmanları

İlke, cors tarayıcı tabanlı istemcilerden etki alanları arası çağrılara izin vermek için bir işleme veya API'ye çıkış noktaları arası kaynak paylaşımı (CORS) desteği ekler.

Not

İlkenin öğelerini ve alt öğelerini ilke bildiriminde sağlanan sırayla ayarlayın. Portal, bu ilkeyi yapılandırmanıza yardımcı olmak için kılavuzlu, form tabanlı bir düzenleyici sağlar. API Management ilkelerini ayarlama veya düzenleme hakkında daha fazla bilgi edinin.

İlke bildirimi

<cors allow-credentials="false | true" terminate-unmatched-request="true | false">
    <allowed-origins>
        <origin>origin uri</origin>
    </allowed-origins>
    <allowed-methods preflight-result-max-age="number of seconds">
        <method>HTTP verb</method>
    </allowed-methods>
    <allowed-headers>
        <header>header name</header>
    </allowed-headers>
    <expose-headers>
        <header>header name</header>
    </expose-headers>
</cors>

Özellikler

Adı Açıklama Zorunlu Varsayılan
allow-credentials Access-Control-Allow-Credentials Denetim öncesi yanıttaki üst bilgi bu özniteliğin değerine ayarlanır ve istemcinin etki alanları arası isteklerde kimlik bilgilerini gönderebilmesini etkiler. İlke ifadelerine izin verilir. Hayır false
terminate-unmatched-request İlke ayarlarıyla eşleşmeyen çıkış noktaları arası isteklerin işlenmesini denetler. İlke ifadelerine izin verilir.

İstek bir denetim öncesi isteği olarak işlendiğinde OPTIONS ve Origin üst bilgi ilke ayarlarıyla eşleşmiyorsa:
- Özniteliği olarak ayarlanırsa trueisteği hemen boş 200 OK bir yanıtla sonlandırın
- Özniteliği olarak falseayarlanırsa, gelen öğesinin doğrudan alt öğeleri olan diğer kapsam cors içi ilkeleri denetleyin ve uygulayın. hiçbir cors ilke bulunmazsa, isteği boş 200 OK bir yanıtla sonlandırın.

veya GETHEAD isteği üst bilgisini içerdiğinde Origin (ve bu nedenle basit bir çıkış noktaları arası istek olarak işlenir) ve ilke ayarlarıyla eşleşmez:
- Özniteliği olarak trueayarlanırsa, isteği hemen boş 200 OK bir yanıtla sonlandırın.
- Özniteliği olarak ayarlandıysa false, isteğin normal şekilde ilerlemesine izin verin ve yanıta CORS üst bilgileri eklemeyin.
Hayır false

Öğeler

Adı Açıklama Zorunlu Varsayılan
izin verilen çıkış noktaları Etki alanları arası isteklerin izin verilen çıkış noktalarını açıklayan öğeleri içerir origin . allowed-originsherhangi bir kaynak veya URI içeren bir veya daha fazla origin öğeye izin verebileceğini belirten * tek origin bir öğe içerebilir. Evet Yok
izin verilen yöntemler Veya dışındaki GETPOST yöntemlere izin veriliyorsa bu öğe gereklidir. Desteklenen HTTP fiillerini belirten öğeleri içerir method . değeri * tüm yöntemleri gösterir. Hayır Bu bölüm yoksa GET ve POST destekleniyorsa.
allowed-headers Bu öğe, isteğe dahil edilebilecek üst bilgilerin adlarını belirten öğeler içerir header . Evet Yok
expose-headers Bu öğe, istemci tarafından erişilebilecek üst bilgilerin adlarını belirten öğeler içerir header . Hayır Yok

Dikkat

İlke * ayarlarında joker karakteri dikkatli kullanın. Bu yapılandırma fazla izin verebilir ve bir API'yi belirli API güvenlik tehditlerine karşı daha savunmasız hale getirebilir.

izin verilen çıkış noktaları öğeleri

Adı Açıklama Zorunlu Varsayılan
başlangıç Değer, tüm çıkış noktalarına izin vermek için veya tek bir çıkış noktası belirten bir URI olabilir * . URI bir düzen, konak ve bağlantı noktası içermelidir. Tırnak işaretleri kullanmayın. Evet Bağlantı noktası bir URI'de atlanırsa, HTTP için 80 numaralı bağlantı noktası kullanılır ve HTTPS için 443 numaralı bağlantı noktası kullanılır.

allowed-methods öznitelikleri

Adı Açıklama Zorunlu Varsayılan
preflight-result-max-age Denetim Access-Control-Max-Age öncesi yanıttaki üst bilgi bu özniteliğin değerine ayarlanır ve kullanıcı aracısının denetim öncesi yanıtı önbelleğe alma yeteneğini etkiler. İlke ifadelerine izin verilir. Hayır 0

allowed-methods öğeleri

Adı Açıklama Zorunlu Varsayılan
yöntemi HTTP fiilini belirtir. İlke ifadelerine izin verilir. Bölüm varsa method en az bir allowed-methods öğe gereklidir. Yok

allowed-headers öğeleri

Adı Açıklama Zorunlu Varsayılan
üst bilgi Üst bilgi adını belirtir. Bu bölüm varsa içinde header en az bir allowed-headers öğe gereklidir. Yok

Değeri * tüm üst bilgileri gösterir.

expose-headers öğeleri

Adı Açıklama Zorunlu Varsayılan
üst bilgi Üst bilgi adını belirtir. Bu bölüm varsa içinde header en az bir expose-headers öğe gereklidir. Yok

Değeri * tüm üst bilgileri gösterir.

Kullanım

Kullanım notları

  • İlkeyi cors birden fazla kapsamda (örneğin, ürün kapsamında ve genel kapsamda) yapılandırabilirsiniz. öğesinin base işlem, API ve ürün kapsamlarında üst kapsamlarda gerekli ilkeleri devralacak şekilde yapılandırıldığından emin olun.
  • cors Ön kontrol sırasında istekte OPTIONS yalnızca ilke değerlendirilir. Yapılandırılan diğer ilkeler onaylanan istekte değerlendirilir.
  • Bu ilke, ilke bölümünde yalnızca bir kez kullanılabilir.

CORS hakkında

CORS , tarayıcının ve sunucunun etkileşim kurmasına ve belirli çıkış noktaları arası isteklere (XMLHttpRequest web sayfasındaki JavaScript'ten diğer etki alanlarına yapılan çağrılar) izin verilip verilmeyeceğini belirlemesine olanak tanıyan HTTP üst bilgi tabanlı bir standarttır. Bu, yalnızca aynı kaynak isteklerine izin vermekten daha fazla esneklik sağlar, ancak tüm çıkış noktaları arası isteklere izin vermekten daha güvenlidir.

CORS iki tür çıkış noktaları arası istek belirtir:

  • Önceden denetimli (veya "ön kontrol") istekleri - Tarayıcı, asıl isteğin gönderilmesine izin verilip verilmediğini belirlemek için önce yöntemini kullanarak OPTIONS sunucuya bir HTTP isteği gönderir. Sunucu yanıtı erişime izin veren üst bilgi içeriyorsa Access-Control-Allow-Origin , tarayıcı gerçek isteği izler.

  • Basit istekler - Bu istekler bir veya daha fazla ek Origin üst bilgi içerir, ancak CORS ön kontrol tetiklemez. Yalnızca ve GET yöntemlerini ve sınırlı bir istek üst bilgisi kümesini kullanan HEAD isteklere izin verilir.

cors ilke senaryoları

cors API Management'ta ilkeyi aşağıdaki senaryolar için yapılandırın:

  • Geliştirici portalında etkileşimli test konsolunu etkinleştirin. Ayrıntılar için geliştirici portalı belgelerine bakın.

    Not

    Etkileşimli konsol için CORS'yi etkinleştirdiğinizde API Management varsayılan olarak ilkeyi cors genel kapsamda yapılandırılır.

  • Arka uçlar kendi CORS desteğini sağlamadığında denetim öncesi istekleri yanıtlamak veya basit CORS isteklerinden geçmek için API Management’i etkinleştirin.

    Not

    İstek, API'de tanımlanan bir OPTIONS yöntemle bir işlemle eşleşiyorsa, ilkeyle cors ilişkili denetim öncesi istek işleme mantığı yürütülmeyecektir. Bu nedenle, bu tür işlemler özel denetim öncesi işleme mantığını uygulamak için kullanılabilir; örneğin, ilkeyi cors yalnızca belirli koşullar altında uygulamak için.

Yaygın yapılandırma sorunları

  • Üst bilgideki abonelik anahtarı - İlkeyi corsürün kapsamında yapılandırdıysanız ve API'niz abonelik anahtarı kimlik doğrulamasını kullanıyorsa, abonelik anahtarı üst bilgide geçirildiğinde ilke çalışmaz. Geçici bir çözüm olarak, istekleri bir abonelik anahtarını sorgu parametresi olarak içerecek şekilde değiştirin.
  • Üst bilgi sürümü oluşturma ile API - İlkeyi corsAPI kapsamında yapılandırıyorsanız ve API'niz üst bilgi sürüm oluşturma şeması kullanıyorsa, sürüm üst bilgide geçirildiğinden ilke çalışmaz. Yol veya sorgu parametresi gibi alternatif bir sürüm oluşturma yöntemi yapılandırmanız gerekebilir.
  • İlke sırası - İlke gelen bölümündeki ilk ilke değilse cors beklenmeyen davranışla karşılaşabilirsiniz. İlke düzenleyicisinde Etkin ilkeyi hesapla'yı seçerek her kapsamdaki ilke değerlendirme sırasını denetleyin. Genel olarak, yalnızca ilk cors ilke uygulanır.
  • Boş 200 Tamam yanıtı - Bazı ilke yapılandırmalarında, bazı çıkış noktaları arası istekler boş 200 OK bir yanıtla tamamlar. Bu yanıt, varsayılan değerine terminate-unmatched-request ayarlandığında ve gelen isteğin ilkede true yapılandırılan izin verilen kaynakla eşleşmeyen bir Origin üst bilgisi olduğunda cors beklenir.

Örnek

Bu örnekte, ve dışında GET özel üst bilgileri veya yöntemleri olanlar gibi denetim öncesi isteklerinPOSTgösterilmektedir. Özel üst bilgileri ve diğer HTTP fiillerini desteklemek için aşağıdaki örnekte gösterildiği gibi ve allowed-methods bölümlerini kullanınallowed-headers.

<cors allow-credentials="true">
    <allowed-origins>
        <!-- Localhost useful for development -->
        <origin>http://localhost:8080/</origin>
        <origin>http://example.com/</origin>
    </allowed-origins>
    <allowed-methods preflight-result-max-age="300">
        <method>GET</method>
        <method>POST</method>
        <method>PATCH</method>
        <method>DELETE</method>
    </allowed-methods>
    <allowed-headers>
        <!-- Examples below show Azure Mobile Services headers -->
        <header>x-zumo-installation-id</header>
        <header>x-zumo-application</header>
        <header>x-zumo-version</header>
        <header>x-zumo-auth</header>
        <header>content-type</header>
        <header>accept</header>
    </allowed-headers>
    <expose-headers>
        <!-- Examples below show Azure Mobile Services headers -->
        <header>x-zumo-installation-id</header>
        <header>x-zumo-application</header>
    </expose-headers>
</cors>

İlkelerle çalışma hakkında daha fazla bilgi için bkz: