Skip to content

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.
  • credentials davranışı 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.