Penguji CORS
Uji dan debug kebijakan Cross-Origin Resource Sharing (CORS) dan permintaan API
Apa itu CORS? CORS (Cross-Origin Resource Sharing) adalah mekanisme yang memungkinkan browser web membuat permintaan lintas-asal (domain, protokol, atau port yang berbeda) dari skrip yang berjalan di browser.
Header CORS Utama
Access-Control-Allow-Origin
: Menentukan asal mana yang diizinkan untuk mengakses sumber dayaAccess-Control-Allow-Methods
: Menentukan metode HTTP mana yang diizinkanAccess-Control-Allow-Headers
: Menentukan header HTTP mana yang dapat digunakanAccess-Control-Allow-Credentials
: Menentukan apakah akan menyertakan kredensial (cookie, otentikasi HTTP)
๐ก Solusi CORS
Solusi Sisi Server
1. Express.js (Node.js):
const cors = require('cors'); app.use(cors({ origin: 'https://example.com', methods: ['GET', 'POST'], credentials: true }));
2. Spring Boot (Java):
@CrossOrigin(origins = "https://example.com") @RestController public class ApiController { ... }
Solusi Sisi Klien
1. Menggunakan Server Proksi:
// package.json (React) "proxy": "http://localhost:3001"
2. JSONP (hanya GET):
// Solusi terbatas tapi sederhana fetch('api?callback=handleResponse')
๐ง Konfigurasi CORS berdasarkan Lingkungan
Next.js
// next.config.js module.exports = { async headers() { return [ { source: '/api/:path*', headers: [ { key: 'Access-Control-Allow-Origin', value: '*' } ] } ] } }
Nginx
location /api { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Headers "Content-Type, Authorization"; }
Apache
# .htaccess Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS" Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
Konfigurasi CORS berdasarkan Lingkungan
Skenario Tes
- โข Permintaan Sederhana: Uji perilaku CORS dasar dengan permintaan GET
- โข Permintaan Preflight: Uji permintaan preflight dengan metode PUT/DELETE
- โข Header Kustom: Uji permintaan dengan header Otorisasi
- โข Kredensial: Uji permintaan dengan cookie
- โข Penanganan Kesalahan: Uji skenario kegagalan
Pertimbangan Keamanan
- โข Berhati-hatilah dengan penggunaan wildcard (*) karena risiko keamanan
- โข Prinsip hak istimewa terendah: Hanya izinkan asal dan metode yang diperlukan
- โข Pembatasan kredensial: Hanya izinkan asal tertentu saat menyertakan kredensial
- โข Tinjauan berkala: Tinjau dan perbarui kebijakan CORS secara berkala
Kiat Debugging CORS
Alat Pengembang Browser
- โข Periksa permintaan OPTIONS di tab Jaringan
- โข Cari pesan kesalahan CORS di Konsol
- โข Verifikasi header CORS di Header Respons
Alat yang Berguna
- โข Penguji CORS (alat ini)
- โข Postman (untuk pengujian API)
- โข Perintah curl (untuk pengujian server langsung)