CORS
BERLAKU UNTUK: Semua tingkatAN API Management
Kebijakan cors
menambahkan dukungan berbagi sumber daya lintas asal (CORS) ke operasi atau API untuk memungkinkan panggilan lintas domain dari klien berbasis browser.
Catatan
Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Untuk membantu Anda mengonfigurasi kebijakan ini, portal menyediakan editor berbasis formulir berikut panduannya. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.
Pernyataan kebijakan
<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>
Atribut
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
allow-credentials | Header Access-Control-Allow-Credentials dalam respons pra-penerbangan akan diatur ke nilai atribut ini dan mempengaruhi kemampuan klien untuk mengirimkan kredensial dalam permintaan lintas domain. Ekspresi kebijakan diizinkan. |
No | false |
terminate-unmatched-request | Mengontrol pemrosesan permintaan lintas asal yang tidak cocok dengan pengaturan kebijakan. Ekspresi kebijakan diizinkan. Ketika OPTIONS permintaan diproses sebagai permintaan preflight dan Origin header tidak cocok dengan pengaturan kebijakan:- Jika atribut diatur ke true , segera hentikan permintaan dengan respons kosong 200 OK - Jika atribut diatur ke false , periksa masuk untuk kebijakan dalam cakupan cors lain yang merupakan turunan langsung dari elemen masuk dan terapkan. Jika tidak ada kebijakan cors yang ditemukan, hentikan permintaan dengan respons 200 OK kosong. Ketika GET atau HEAD permintaan menyertakan Origin header (dan oleh karena itu diproses sebagai permintaan lintas asal sederhana), dan tidak cocok dengan pengaturan kebijakan:- Jika atribut diatur ke true , segera hentikan permintaan dengan respons kosong 200 OK .- Jika atribut diatur ke false , izinkan permintaan untuk dilanjutkan secara normal dan jangan tambahkan header CORS ke respons. |
No | true |
Elemen
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
allowed-origins | Berisi elemen origin yang menjelaskan asal yang diizinkan untuk permintaan lintas domain.
allowed-origins dapat berisi satu elemen origin yang menentukan * untuk memungkinkan asal mana pun, atau satu atau lebih elemen origin yang berisi URI. |
Ya | T/A |
allowed-methods | Elemen ini diperlukan jika metode selain GET atau POST diizinkan. Berisi elemen method yang menentukan kata kerja HTTP yang didukung. Nilai * menunjukkan semua metode. |
No | Jika bagian ini tidak ada, GET dan POST didukung. |
allowed-headers | Elemen ini berisi elemen header yang menentukan nama header yang dapat disertakan dalam permintaan. |
Ya | T/A |
expose-headers | Elemen ini berisi elemen header yang menentukan nama header yang akan dapat diakses oleh klien. |
No | T/A |
Perhatian
Gunakan wildcard *
dengan hati-hati dalam pengaturan kebijakan. Konfigurasi ini mungkin terlalu permisif dan dapat membuat API lebih rentan terhadap Ancaman keamanan API tertentu.
elemen asal yang diizinkan
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
asal | Nilai dapat berupa * untuk memungkinkan semua asal, atau URI yang menentukan satu asal. URI harus menyertakan skema, host, dan port. Jangan sertakan tanda kutip. |
Ya | Jika port dihilangkan dalam URI, port 80 digunakan untuk HTTP dan port 443 digunakan untuk HTTPS. |
atribut metode yang diizinkan
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
preflight-result-max-age | Header Access-Control-Max-Age dalam respons preflight akan diatur ke nilai atribut ini dan memengaruhi kemampuan agen pengguna untuk membuat cache respons preflight. Ekspresi kebijakan diizinkan. |
No | 0 |
elemen metode yang diizinkan
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
metode | Menentukan kata kerja HTTP. Ekspresi kebijakan diizinkan. | Setidaknya satu elemen method diperlukan jika bagian allowed-methods tersebut ada. |
T/A |
elemen allowed-headers
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
{i>header | Menentukan nama header. | Setidaknya satu header elemen diperlukan jika allowed-headers bagian tersebut ada. |
T/A |
elemen expose-headers
Nama | Deskripsi | Wajib diisi | Default |
---|---|---|---|
{i>header | Menentukan nama header. | Setidaknya satu header elemen diperlukan jika expose-headers bagian tersebut ada. |
T/A |
Penggunaan
- Bagian kebijakan: masuk
- Cakupan kebijakan: global, ruang kerja, produk, API, operasi
- Gateway: klasik, v2, konsumsi, dihost sendiri, ruang kerja
Catatan penggunaan
- Anda dapat mengonfigurasi kebijakan
cors
di lebih dari satu cakupan (misalnya, pada cakupan produk dan cakupan global). Pastikan elemenbase
dikonfigurasi pada operasi, API, dan cakupan produk untuk mewarisi kebijakan yang diperlukan pada cakupan induk. - Hanya kebijakan
cors
yang dievaluasi pada permintaanOPTIONS
selama preflight. Kebijakan yang dikonfigurasi lainnya dievaluasi pada permintaan yang disetujui.
- Kebijakan ini hanya dapat digunakan sekali di bagian kebijakan.
Tentang CORS
CORS adalah standar berbasis header HTTP yang memungkinkan browser dan server untuk berinteraksi dan menentukan apakah akan mengizinkan permintaan lintas asal tertentu (panggilan XMLHttpRequest
yang dilakukan dari JavaScript di halaman web ke domain lain). Ini memungkinkan lebih banyak fleksibilitas daripada hanya memungkinkan permintaan asal yang sama, tetapi lebih aman daripada mengizinkan semua permintaan lintas asal.
CORS menentukan dua jenis permintaan lintas asal:
Permintaan yang telah di-preflight (atau "preflight") - Browser terlebih dahulu mengirim permintaan menggunakan metode
OPTIONS
ke server, untuk menentukan apakah permintaan aktual diizinkan untuk dikirim. Jika respons server menyertakan headerAccess-Control-Allow-Origin
yang memungkinkan akses, browser mengikuti permintaan aktual.Permintaan sederhana - Permintaan ini mencakup satu atau beberapa header
Origin
tambahan tetapi tidak memicu preflight CORS. Hanya permintaan yang menggunakan metodeGET
danHEAD
serta set header permintaan terbatas yang diizinkan.
skenario kebijakan cors
Konfigurasikan kebijakan cors
di API Management untuk skenario berikut:
Aktifkan konsol pengujian interaktif di portal pengembang. Lihat dokumentasi portal pengembang untuk detailnya.
Catatan
Saat Anda mengaktifkan CORS untuk konsol interaktif, secara default API Management mengonfigurasi kebijakan
cors
di cakupan global.Aktifkan API Management untuk membalas permintaan preflight atau untuk melewati permintaan CORS sederhana saat backend tidak menyediakan dukungan CORS mereka sendiri.
Catatan
Jika permintaan cocok dengan operasi dengan metode
OPTIONS
yang ditentukan dalam API, logika pemrosesan permintaan preflight yang terkait dengan kebijakancors
tidak akan dijalankan. Oleh karena itu, operasi tersebut dapat digunakan untuk menerapkan logika pemrosesan preflight kustom - misalnya, untuk menerapkan kebijakancors
hanya dalam kondisi tertentu.
Masalah konfigurasi umum
-
Kunci langganan di header - Jika Anda mengonfigurasi kebijakan
cors
di cakupan produk, dan API Anda menggunakan autentikasi kunci langganan, kebijakan tidak akan berfungsi saat kunci langganan diteruskan di header. Sebagai solusinya, ubah permintaan untuk menyertakan kunci langganan sebagai parameter kueri. -
API dengan versi header - Jika Anda mengonfigurasi kebijakan
cors
di cakupan API, dan API Anda menggunakan skema versi header, kebijakan tidak akan berfungsi karena versi diteruskan di header. Anda mungkin perlu mengonfigurasi metode penerapan versi alternatif seperti jalur atau parameter kueri. -
Urutan kebijakan - Anda mungkin mengalami perilaku tak terduga jika kebijakan
cors
tersebut bukan kebijakan pertama di bagian masuk. Pilih Hitung kebijakan efektif di editor kebijakan untuk memeriksa urutan evaluasi kebijakan di setiap cakupan. Umumnya, hanya kebijakancors
pertama yang diterapkan. -
Respons Kosong 200 OK - Dalam beberapa konfigurasi kebijakan, permintaan lintas asal tertentu selesai dengan respons
200 OK
kosong. Respons ini diharapkan ketikaterminate-unmatched-request
diatur ke nilaitrue
defaultnya dan permintaan masuk memiliki headerOrigin
yang tidak cocok dengan asal yang diizinkan yang dikonfigurasi dalam kebijakancors
.
Contoh
Contoh ini menunjukkan cara mendukung permintaan preflight, seperti permintaan dengan header kustom atau metode selain GET
dan POST
. Untuk mendukung header kustom dan kata kerja HTTP tambahan, gunakan bagian allowed-methods
dan allowed-headers
seperti yang diperlihatkan dalam contoh berikut.
<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>
Kebijakan terkait
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Tutorial: Mengubah dan melindungi API Anda
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Ekspresi kebijakan
- Mengatur atau mengedit kebijakan
- Menggunakan kembali konfigurasi kebijakan
- Repositori cuplikan kebijakan
- Toolkit kebijakan Azure API Management
- Kebijakan penulis menggunakan Microsoft Copilot di Azure