Study
Rocket

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".

Editor Latihan

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.