CORS di Rocket
Penjelasan
Rocket sendiri tidak menyediakan dukungan CORS bawaan di core crate-nya — solusi paling umum adalah memakai crate pihak ketiga seperti `rocket_cors`, yang menyediakan sebuah fairing (bukan layer seperti di Axum) untuk menambahkan header CORS ke semua response. Alurnya: buat konfigurasi `CorsOptions` (origin yang diizinkan, method yang diizinkan, header yang diizinkan), panggil `.to_cors()` untuk mendapatkan fairing-nya, lalu pasang lewat `.attach(cors)` seperti fairing pada umumnya. Konseptual ini konsisten dengan cara Rocket menangani semua cross-cutting concern lain — semuanya berbentuk fairing yang `.attach()`, berbeda dari Axum yang membedakan antara `Layer` (Tower) untuk hal seperti CORS/tracing dan extractor untuk ekstraksi data per-request.
Contoh Konsep
// cargo add rocket_cors
#[macro_use] extern crate rocket;
use rocket_cors::{CorsOptions, AllowedOrigins};
#[get("/")]
fn hello() -> &'static str { "Hello!" }
#[launch]
fn rocket() -> _ {
let cors = CorsOptions::default()
.allowed_origins(AllowedOrigins::all())
.to_cors()
.expect("gagal membuat konfigurasi CORS");
rocket::build()
.mount("/", routes![hello])
.attach(cors)
}
Praktikum
Lengkapi konfigurasi `CorsOptions` di bawah supaya hanya mengizinkan origin "https://frontend.example.com".
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Karena `rocket_cors` adalah crate pihak ketiga (bukan bagian resmi tim Rocket seperti `rocket_db_pools`), selalu cek compatibility versinya dengan versi Rocket yang kamu pakai di `Cargo.toml` sebelum instalasi — mismatch versi adalah sumber error kompilasi paling umum saat memakai crate CORS ini.