CORS
Kaynak: backend/src/app.ts.
Temel yapılandırma
origin : yalnızca .env -> CORS_ORIGIN listesi
credentials : true
methods : GET, POST, PUT, PATCH, DELETE, OPTIONS
allowedHeaders: Content-Type, Authorization
İzin verilen origin listesi uygulama başlarken bir kez oluşturulur
(trim + sondaki / temizliği + tekilleştirme env.util.ts içinde yapılır).
Origin başlığı olmayan istekler
origin === undefined ise istek kabul edilir. Tarayıcı dışı istemcilerde
(curl, sunucu-sunucu çağrıları, container sağlık kontrolü) Origin başlığı
gelmez; bunlar CORS kapsamında değildir.
Geliştirmeye özel iki genişletme
Her ikisi de yalnızca NODE_ENV !== 'production' iken etkindir. Docker
imajında NODE_ENV=production tanımlıdır, dolayısıyla üretim davranışı
değişmez.
1. Backend'in kendi origin'i
http://localhost:<PORT> ve http://127.0.0.1:<PORT> eklenir. Port sabit
yazılmaz, env.port değerinden türetilir.
2. Özel ağ (private network) origin'leri
Yalnızca http ve yalnızca RFC1918 aralıkları + loopback kabul edilir:
localhost | 127.x | 10.x | 192.168.x | 172.16-31.x (opsiyonel :port)
Kök neden: Vite dev sunucusu host: '0.0.0.0' ile LAN'dan da açılır. Başka
bir cihaz http://192.168.x.x:5173 üzerinden girdiğinde istek Vite proxy'sinden
geçer; changeOrigin yalnızca Host başlığını değiştirir, tarayıcının
Origin başlığı aynen iletilir. Bu origin listede olmadığı için istek CORS
katmanında 403 ile reddediliyor, arayüz de 403'ü "Bu işlem için yetkiniz
bulunmuyor." mesajına çevirdiği için hata bir yetki sorunu gibi
görünüyordu. Giriş ucu bir auth guard altında değildir.
Yapılmayanlar
origin: '*'kullanılmaz.credentialsdavranışı değiştirilmez.- IP adresi koda sabit yazılmaz; makine/ağ değişince ek yapılandırma gerekmez.
- Üretimde rastgele özel ağ origin'i açılmaz.