Memahami dan mengetahui cara membuat permintaan Cross-Origin Resource Sharing (CORS) sangat penting untuk pengembangan web modern karena banyak aplikasi web yang perlu berinteraksi dengan data yang di-host di API pihak ketiga, atau sumber daya yang dilayani dari domain yang berbeda. Karena browser web tidak mengizinkan halaman web untuk meminta data dari domain lain karena kebijakan keamanan yang disebut Same-Origin Policy (SOP). Di sinilah Cross-Origin Resource Sharing (CORS) berperan, memungkinkan aplikasi web untuk membuat permintaan lintas asal dengan aman.
Ketika sebuah halaman web membuat permintaan ke domain yang berbeda, CORS memastikan bahwa server yang menghosting sumber daya mengizinkan tindakan ini. Aspek penting dari CORS adalah permintaan sebelum terbang, sebuah mekanisme yang memeriksa apakah permintaan yang sebenarnya bisa dibuat sebelum dikirim. Pada artikel ini, kita akan mempelajari apa itu permintaan pra-penerbangan CORS, mengapa hal itu diperlukan, dan bagaimana cara kerjanya.
Apa yang dimaksud dengan Permintaan Preflight CORS?
Permintaan pra-penerbangan CORS adalah permintaan HTTP yang secara otomatis dikirim oleh browser web sebelum permintaan aktual ke server. Permintaan ini dipicu ketika browser telah memutuskan bahwa permintaan lintas asal tidak memenuhi kondisi tertentu seperti ketika mengirim header khusus atau menggunakan metode selain permintaan GET/POST sederhana. Permintaan preflight memungkinkan browser untuk memeriksa apakah server target bersedia menerima permintaan yang sebenarnya dan merespons dengan izin yang sesuai.
Secara sederhana, permintaan preflight adalah pemeriksaan tambahan untuk memastikan bahwa server tidak keberatan menerima permintaan yang mungkin melibatkan data sensitif atau melibatkan tindakan di luar operasi halaman web yang umum dan aman.
sumber: container-solutions.com |
Mengapa Kita Membutuhkan Permintaan Preflight?
Permintaan pra-penerbangan membantu meningkatkan keamanan dengan memungkinkan server menentukan jenis permintaan lintas asal yang bersedia mereka tangani. Terutama ketika permintaan datang dengan kondisi tertentu, seperti:
1. Metode HTTP Khusus: Ini adalah metode seperti PUT, DELETE, PATCH, dll., yang bukan merupakan permintaan sederhana dan dapat mengubah status server dengan cara yang mungkin tidak terduga... Server memeriksa metode yang ingin digunakan dalam permintaan pra-penerbangan.
2. Header Khusus: Jika permintaan akan menyertakan header khusus (misalnya Otorisasi, X-Custom-Header), permintaan pra-penerbangan memungkinkan server untuk memutuskan apakah server ingin menerima header tersebut atau tidak.
3. Jenis Konten yang Tidak Diizinkan: Jika permintaan dibuat dengan tipe konten seperti application/json, server dapat menggunakan permintaan preflight untuk memeriksa apakah server dapat memproses tipe data apa pun yang digunakan.
Tanpa permintaan preflight, server berpotensi menerima permintaan dengan header atau metode yang berbahaya atau tidak terduga, yang menyebabkan risiko keamanan, seperti Pemalsuan Permintaan Lintas Situs (CSRF) atau serangan lainnya.
Bagaimana Cara Kerja Permintaan Preflight CORS?
Dalam keadaan tertentu, ketika permintaan lintas asal akan dibuat, browser memicu permintaan preflight. Itulah masalahnya; hal ini memerlukan permintaan HTTP OPTIONS, di mana browser mengirimkan apa yang dikenal sebagai pesan “preflight” ke server target, menanyakan apakah aman untuk membuat permintaan yang sebenarnya. Inilah cara kerja prosesnya:
1. Peramban Mengirimkan Permintaan Preflight: Ketika kondisi untuk preflight terpenuhi (permintaan lintas asal), browser akan mengirimkan permintaan HTTP OPTIONS ke server target. Permintaan ini memiliki tajuk khusus:
- Asal: Asal halaman web yang diminta.
- Metode Permintaan-Kontrol-Akses: Metode HTTP yang akan digunakan dalam permintaan yang sebenarnya (misalnya, GET, POST, PUT, DELETE).
- Header Permintaan-Kontrol-Akses: Daftar yang dipisahkan dengan koma dari semua tajuk khusus yang akan menjadi bagian dari permintaan yang sebenarnya.
2. Respons Server dengan Header CORS: Server merespons permintaan pra-penerbangan dengan respons HTTP yang menyertakan tajuk CORS yang menginformasikan kepada peramban jika permintaan sebenarnya diizinkan:
- Akses-Kontrol-Izinkan-Asal: Header ini mendefinisikan domain mana yang diizinkan untuk membuat permintaan sumber daya.
- Access-Control-Allow-Methods: Menentukan metode HTTP yang diizinkan untuk permintaan lintas asal (GET, POST, PUT, dll.).
- Akses-Kontrol-Izinkan-Header: Header apa yang dapat digunakan saat membuat permintaan yang sebenarnya.
- Akses-Kontrol-Izinkan-Kredensial: Menunjukkan apakah permintaan dapat menyertakan kredensial pengguna (cookie atau autentikasi HTTP).
3. Peramban Melakukan Permintaan yang Sebenarnya: Jika respons server terhadap permintaan pra-penerbangan menunjukkan bahwa permintaan tersebut diizinkan, browser akan melanjutkan permintaan yang sebenarnya. Jika respons menolak permintaan, browser akan memblokir permintaan dan mungkin menimbulkan kesalahan.
Kesimpulan
Permintaan pra-penerbangan CORS memainkan peran penting dalam memastikan keamanan dan fungsionalitas permintaan lintas asal. Dengan mengizinkan browser untuk memeriksa server sebelum mengirim permintaan sensitif, permintaan preflight mencegah tindakan yang berpotensi berbahaya atau tidak sah untuk dieksekusi di server. Pengembang perlu memahami cara kerja permintaan ini untuk membangun aplikasi web yang aman yang melibatkan interaksi dengan sumber daya eksternal.
Dengan mengonfigurasi header CORS dengan benar di server, pengembang dapat mengontrol permintaan asal silang mana yang diizinkan, sehingga menyediakan cara yang aman dan efisien bagi aplikasi web modern untuk berkomunikasi lintas domain.
Kembali ke>>>> Memahami CORS: Pembagian Sumber Daya Lintas Asal