CORS nedir? Backend tarafında nasıl doğru yapılandırılır?
Cevap
CORS (Cross-Origin Resource Sharing), tarayıcının farklı origin'den (şema + domain + port) yapılan isteklere izin verip vermeyeceğini belirlemek için kullandığı HTTP başlık mekanizmasıdır. Varsayılan Same-Origin Policy, https://app.ornek.com'daki JavaScript'in https://api.ornek.com yanıtını okumasını engeller; sunucu izin verdiğini başlıklarla belirtir.
CORS bir tarayıcı kuralıdır: curl, Postman veya sunucudan sunucuya istekler CORS'tan etkilenmez. Yani CORS bir güvenlik duvarı ya da kimlik doğrulama yöntemi değildir.
Preflight
GET/POST dışındaki metotlar, application/json gibi "basit olmayan" içerik tipleri veya Authorization gibi özel başlıklar varsa tarayıcı önce bir OPTIONS isteği gönderir:
OPTIONS /orders
Origin: https://app.ornek.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type, authorization
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://app.ornek.com
Access-Control-Allow-Methods: GET, POST, PATCH
Access-Control-Allow-Headers: content-type, authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 600
Vary: OriginExpress örneği
import cors from "cors";
app.use(cors({
origin: ["https://app.ornek.com", "https://admin.ornek.com"],
credentials: true,
maxAge: 600,
}));Sık hatalar
- Cookie gönderiliyorsa (
credentials: true)Access-Control-Allow-Origin: *kullanılamaz; origin açıkça yazılmalıdır. - Gelen
Originbaşlığını kontrol etmeden aynen geri yansıtmak,*'dan bile tehlikelidir (her site kullanıcının cookie'siyle API'yi okuyabilir). - Dinamik origin dönüyorsanız cache'lerin karışmaması için
Vary: Originekleyin. - Preflight isteğinin auth middleware'ine takılıp 401 dönmesi;
OPTIONSauth'tan önce cevaplanmalıdır.
İlgili API Tasarımı soruları
- HTTP 401 ile 403 durum kodları arasındaki fark nedir?
- JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?
- Idempotency nedir? Hangi HTTP metotları idempotent'tir?
- OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?
- Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.
- gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.