CORS nedir; preflight (OPTIONS) isteği ne işe yarar?
Kısa cevap
CORS (Cross-Origin Resource Sharing), tarayıcının bir sayfadan başka bir origin'e (farklı scheme, domain ya da port) yapılan isteklere uyguladığı same-origin kısıtının, sunucunun izniyle kontrollü biçimde gevşetilmesidir. Sunucu izin verdiği origin'leri, metotları ve header'ları Access-Control-Allow-* yanıt header'larıyla bildirir; tarayıcı, basit olmayan isteklerden (PUT, DELETE ya da özel header içeren istekler) önce asıl isteğe izin olup olmadığını sormak için bir preflight OPTIONS isteği gönderir. TR7'de bu iş CORS aksiyonuyla yapılır: Allowed Methods, Allowed Origins ve Allowed Headers alanlarının varsayılan değeri *'dır; Origin header'ı taşıyan OPTIONS istekleri Kurum Servisine gönderilmeden 204 No Content ile yanıtlanır, izinli origin'den gelen diğer isteklerin yanıtına Access-Control-Allow-Origin eklenir. Origin header'ı olmayan isteklerde aksiyon hiçbir şey yapmaz.
TR7'de Nerede Kullanılır
| Nerede | Alan / etiket | Ne için |
|---|---|---|
| Load Balancer → Actions (Policy Actions) → aksiyon formu | Action Type → CORS | CORS davranışını tanımlama |
| CORS aksiyon formu | Allowed Methods (varsayılan *) | Preflight yanıtındaki Access-Control-Allow-Methods değeri |
| CORS aksiyon formu | Allowed Origins (varsayılan *) | Access-Control-Allow-Origin eklenecek origin'ler |
| CORS aksiyon formu | Allowed Headers (varsayılan *) | Preflight yanıtındaki Access-Control-Allow-Headers değeri |
| Load Balancer → Load Balancer vService List → HTTP vService formu | Actions | CORS aksiyonunu vService'e bağlama |
TR7'de CORS Aksiyonu Nasıl Yanıt Verir?
| İstek | TR7'nin davranışı |
|---|---|
Origin header'ı yok | Aksiyon devreye girmez; istek ve yanıt değişmeden geçer. |
Origin header'lı OPTIONS (preflight) | Kurum Servisine gönderilmez; 204 No Content döner. Yanıtta Access-Control-Allow-Methods, Access-Control-Allow-Headers ve Access-Control-Max-Age: 600 bulunur; origin izinliyse Access-Control-Allow-Origin da eklenir. |
Origin header'lı diğer istekler | Kurum Servisine iletilir; origin izinliyse yanıta Access-Control-Allow-Origin eklenir. |
Allowed origins listesinde * yoksa izinli origin'e verilen yanıta ayrıca Vary: Accept-Encoding,Origin eklenir. Access-Control-Allow-Credentials ve Access-Control-Expose-Headers header'ları bu aksiyonla üretilmez (Allowed Headers altındaki davranış ayrıntıları).
Sık Karıştırılan Noktalar
- "CORS sunucuyu saldırılara karşı korur." CORS tarayıcının uyguladığı bir kuraldır; tarayıcı dışı istemciler (betikler, API araçları) bu kısıta tabi değildir. Sunucu tarafı koruma için WAF kullanılır.
- "İzinsiz origin'den gelen preflight'a TR7 hata döner." TR7 preflight'a yine 204 döner; yalnızca
Access-Control-Allow-Originheader'ını eklemez ve asıl isteği tarayıcı engeller. - "Değerler virgülden sonra boşlukla yazılabilir." Liste virgülle ve boşluksuz yazılır; boşluklu yazımda (
a.com, *)*joker olarak tanınmaz (Allowed Origins). - "
.example.comana domain'i de kapsar." Bu yazım yalnızca subdomain'leri kapsar;example.comiçin ayrı girdi gerekir.
Dokümantasyonda nasıl yapılır
