Akses lintas asal mengacu pada permintaan sumber daya dari domain, protokol, atau port yang berbeda dari sumbernya sendiri.
Browser menerapkan kebijakan asal yang sama demi alasan keamanan, yang membatasi permintaan lintas asal dalam skrip. Namun, akses lintas asal sering terjadi dalam praktiknya. Oleh karena itu, W3C menyediakan solusi standar untuk lintas asal: Berbagi Sumber Daya Lintas Asal (CORS), yang mendukung permintaan lintas asal yang aman dan transmisi data.
Browser membagi permintaan CORS menjadi dua jenis:
Permintaan pra-pemeriksaan: Mekanisme perlindungan untuk mencegah modifikasi sumber daya oleh permintaan tidak sah. Browser mengirimkan permintaan pra-pemeriksaan dengan metode
OPTIONSsebelum permintaan aktual, untuk mengetahui apakah server mengizinkan permintaan lintas asal. Setelah konfirmasi izin diterima, permintaan HTTP aktual dilakukan.
Permintaan sederhana
Permintaan sederhana memenuhi kondisi berikut:
Metode permintaan adalah salah satu dari berikut ini:
HEADGETPOST
Header HTTP hanya mencakup bidang berikut:
Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragmaDPRDownlinkSave-DataViewport-WidthWidth
Nilai dari
Content-Typehanya mencakup tipe berikut:text/plainmultipart/form-dataapplication/x-www-form-urlencoded
Permintaan pra-pemeriksaan
Untuk semua permintaan yang tidak memenuhi kondisi permintaan sederhana, permintaan OPTIONS dipicu sebagai pra-pemeriksaan sebelum komunikasi aktual. Jenis permintaan ini disebut Permintaan pra-pemeriksaan.
Permintaan pra-pemeriksaan mengirimkan informasi formal ke server melalui header permintaan, termasuk:
Origin: Informasi sumber permintaan.Access-Control-Request-Method: Metode permintaan berikutnya, seperti POST atau GET.Access-Control-Request-Headers: Daftar header eksplisit dalam permintaan berikutnya.
Setelah menerima permintaan pra-pemeriksaan, server menentukan apakah permintaan lintas asal diizinkan berdasarkan informasi header, dan mengembalikan respons melalui header berikut:
Access-Control-Allow-Origin: Daftar origin lintas asal yang diizinkan.Access-Control-Allow-Methods: Daftar metode lintas asal yang diizinkan.Access-Control-Allow-Headers: Daftar header lintas asal yang diizinkan.Access-Control-Expose-Headers: Daftar header yang diizinkan untuk diekspos.Access-Control-Max-Age: Maksimum waktu cache browser dalam detik.Access-Control-Allow-Credentials: Apakah pengiriman Cookie diizinkan.
Browser menentukan apakah akan melanjutkan permintaan aktual berdasarkan informasi CORS yang dikembalikan. Proses ini dilakukan secara otomatis oleh browser, sementara server hanya perlu mengonfigurasi aturan CORS tertentu.
Dukungan untuk CORS
MGS menyediakan fungsi untuk mengonfigurasi aturan CORS, memungkinkan sistem bisnis memutuskan apakah mengizinkan permintaan lintas asal tertentu. Aturan tersebut dikonfigurasi berdasarkan dimensi appId + workspaceId.
Konfigurasi CORS
Masuk ke konsol mPaaS dan ikuti langkah-langkah berikut:
Di bilah navigasi kiri, klik Mobile Gateway Service.
Di halaman tab Manage gateway, klik tab Function switch untuk mengonfigurasi CORS.
Setelah mengaktifkan CORS, semua layanan API aplikasi di workspace saat ini mendukung permintaan lintas asal sesuai dengan konfigurasi berikut:
Asal yang diizinkan:
Access-Control-Allow-Origin, mendukung beberapa asal dipisahkan dengan koma, serta karakter wildcard “*”.Metode yang diizinkan:
Access-Control-Allow-Methods, mendukung beberapa metode.Header yang diizinkan:
Access-Control-Allow-Headers, mendukung beberapa header dipisahkan dengan koma, serta karakter wildcard “*”.Header yang diekspos:
Access-Control-Expose-Headers, mendukung beberapa header dipisahkan dengan koma, tetapi tidak mendukung karakter wildcard “*”.Masa berlaku:
Access-Control-Max-Age, maksimum waktu cache browser dalam detik.Izinkan kredensial:
Access-Control-Allow-Credentials, apakah pengiriman Cookie diizinkan.
Permintaan lintas asal
Permintaan API lintas asal harus menyertakan header permintaan X-CORS-${appId}-${workspaceId}. Saat permintaan pra-pemeriksaan tiba di gateway, gateway mem-parsing X-CORS-${appId}-${workspaceId} di Access-Control-Request-Headers untuk mendapatkan appId dan workspaceId, lalu mengambil konfigurasi CORS yang sesuai. Header permintaan lintas asal gateway harus mencakup informasi berikut:
X-CORS-\${AppId}-\${WorkspaceId}: Wajib. Ganti placeholder dengan AppID dan WorkspaceId yang sebenarnya.
Operation-Type
WorkspaceId
AppId
Content-Type
Version
$.ajax({
url: 'http://${mpaasgw_host}/mgw.htm',// Masukkan alamat gateway
headers: {
'X-CORS-${appId}-${workspaceId}':'1' // Bagian ini wajib
'Operation-Type':${operationType}, // Masukkan operationType
'AppId':${appId}, // Masukkan appId
'WorkspaceId':${worksapceId}, // Masukkan worksapceId
'Content-Type':'application/json',
'Version':'2.0',
},
type: 'POST',
dataType: 'json',
data: JSON.stringify(reqData),
success: function(data){}
});Untuk header yang diizinkan dalam CORS, tambahkan atau atur “*” sesuai dengan situasi sebenarnya.