CORS uygulama koduna bırakıldığında, her API ayrı bir tarayıcı uyumluluk problemine dönüşür.
Modern web uygulamaları genellikle farklı domain, subdomain veya port üzerinden çalışan API'lere erişir. Tarayıcı bu erişimi CORS politikasıyla sınırlar. API doğru Access-Control-Allow-* başlıklarını dönmezse istek sunucu tarafında çalışsa bile tarayıcı tarafından engellenir. Sonuç kullanıcı için kırık uygulama, ekip için zor teşhis edilen CORS hatasıdır.
Bu problem çoğu kurumda uygulama ekiplerine dağıtılır. Her servis kendi framework ayarında Origin, Method, Header, Credentials ve Max-Age davranışını ayrı ayrı tanımlar. Servis sayısı arttıkça aynı CORS politikasının farklı uygulamalarda farklı yazılması kaçınılmaz hale gelir.
Yanlış CORS ayarı güvenlik riski de üretir. Geliştirme sırasında hızlı çözüm olarak wildcard Origin açılır, credentials ile birlikte fazla geniş izinler verilir veya preflight davranışı eksik bırakılır. Bu tür ayarlar production'a taşındığında API yüzeyi gereksiz şekilde açılır.
Doğru yaklaşım, CORS politikasını merkezi bir response/request kuralı olarak yönetmektir. Origin allow-list, credentials, allowed methods, allowed headers ve preflight cache tek yerde tanımlanmalı; uygulama koduna dağılmamalıdır.
TR7 CORS Politika Kuralı bu modeli sunar: preflight ve actual response CORS başlıklarını tek aksiyondan, vService veya path seviyesinde yönetilebilir hale getirir.
Yaklaşımımız
TR7 CORS politikası, origin doğrulama, preflight yönetimi, response başlıkları ve koşullu uygulama mantığını tek kural altında birleştirir.
Origin allow-list yalnız izin verilen kaynakları kabul eder
TR7, gelen Origin değerini tanımlı allow-list ile karşılaştırabilir. Liste sabit domain'ler veya regex tabanlı daha esnek eşleşmeler içerebilir.
Preflight istekleri uygulamaya yük bindirmeden cevaplanır
OPTIONS preflight isteklerinde gerekli CORS başlıkları TR7 tarafından üretilebilir. Böylece uygulama yalnız gerçek API isteğine odaklanır.
Actual response başlıkları tarayıcı beklentisine göre tamamlanır
Access-Control-Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials ve Max-Age gibi başlıklar merkezi politika üzerinden eklenir. Tarayıcı uyumluluğu uygulama kodundan bağımsız hale gelir.
vService ve path bazlı politika farklı API'leri ayırır
Aynı cihaz üzerinde farklı API yüzeyleri farklı CORS davranışıyla çalışabilir. Public API daha kontrollü, partner API daha dar, internal API ise ayrı allow-list ile yönetilebilir.
Yetenekler
CORS Politika Kuralı, tek aksiyondan preflight ve actual response yönetimi sağlayarak API yayınlama sürecini sadeleştirir.
Tek kural preflight ve actual response CORS başlıklarını birlikte yönetir
TR7 CORS aksiyonu hem OPTIONS preflight isteklerini hem de gerçek API response başlıklarını aynı politika altında ele alabilir. Bu, uygulama ekiplerinin preflight ve actual response davranışını ayrı ayrı kodlamasını engeller. Politika bir kez tanımlanır ve ilgili vService veya path üzerinde uygulanır. Operasyon tarafı CORS davranışını merkezi olarak yönetebilir.
Origin allow-list yalnız güvenilen frontend kaynaklarına izin verir
CORS politikasında izin verilen Origin değerleri açıkça tanımlanabilir. Bu liste belirli domain'lerden, subdomain kalıplarından veya regex tabanlı eşleşmelerden oluşabilir. Wildcard kullanımına mecbur kalmadan güvenilen frontend uygulamalarına erişim verilir. API yüzeyi gereksiz kaynaklara açılmadan tarayıcı erişimi sağlanır.
Regex destekli origin eşleşmesi çoklu subdomain yapılarını kolaylaştırır
Kurumlar sıkça müşteri, tenant veya ortam bazlı subdomain yapıları kullanır. Regex tabanlı origin eşleşmesi, her subdomain'i tek tek yazmadan kontrollü izin politikası kurmayı sağlar. Örneğin belirli domain ağacı altındaki tenant frontend'leri kabul edilebilir. Bu esneklik, wildcard açmadan ölçekli CORS yönetimi sağlar.
Credentials toggle cookie ve auth header kullanımını kontrollü açar
Access-Control-Allow-Credentials davranışı merkezi olarak açılıp kapatılabilir. Cookie veya Authorization header ile çalışan frontend'lerde bu ayar kritik önemdedir. Credentials açıkken Origin allow-list'in dar tutulması gerekir. TR7, bu davranışı uygulama ekiplerinin dağınık ayarlarından çıkarıp tek policy noktasına taşır.
Allowed methods listesi API yüzeyini tarayıcı seviyesinde sınırlar
GET, POST, PUT, PATCH, DELETE veya OPTIONS gibi method'lar politika içinde tanımlanabilir. Tarayıcı preflight sırasında yalnız izin verilen method'ları kabul eder. Bu, API'nin istemci tarafında hangi işlem tiplerine açık olduğunu netleştirir. Güvenlik ve geliştirici deneyimi aynı listeden yönetilir.
Allowed headers listesi özel header kullanımını düzenler
Authorization, Content-Type, X-Request-ID veya özel uygulama header'ları allow-list içinde tanımlanabilir. Tarayıcı preflight isteğinde bu header'ların kullanılıp kullanılamayacağını kontrol eder. Eksik header izinleri frontend hatasına, fazla geniş header izinleri gereksiz yüzey açılmasına neden olur. TR7 bu dengeyi merkezi olarak yönetir.
Preflight max-age cache tarayıcı istek yükünü azaltır
Access-Control-Max-Age değeriyle tarayıcının preflight sonucunu ne kadar süre cache'leyeceği ayarlanabilir. Uygun max-age değeri, sık API çağrılarında OPTIONS trafiğini azaltır. Çok kısa değer gereksiz preflight yükü, çok uzun değer ise policy değişikliklerinin geç yansıması anlamına gelebilir. TR7 bu ayarı servis ihtiyacına göre yapılandırılabilir hale getirir.
Per-vService uygulama her API için ayrı CORS standardı sağlar
Her vService kendi CORS politikasına sahip olabilir. Public API, partner API, admin API veya internal API farklı origin ve method listeleriyle çalışabilir. Bu model tek global CORS ayarının tüm API'lere fazla geniş uygulanmasını engeller. Operatör servis bazında güvenlik sınırı kurar.
Per-path uygulama aynı serviste farklı endpoint davranışı sağlar
Aynı vService içinde farklı path'ler için farklı CORS politikaları uygulanabilir. Örneğin `/public/api` daha geniş origin listesiyle, `/admin/api` yalnız belirli yönetim frontend'iyle çalışabilir. Bu, API yüzeyini endpoint seviyesinde ayrıştırır. Uygulama kodunda karmaşık CORS if blokları yazmaya gerek kalmaz.
Trafik kuralları motoruyla koşullu CORS davranışı kurulabilir
CORS aksiyonu trafik kuralları motorunun parçası olarak kullanılabilir. Host, path, header, method veya farklı koşullara göre CORS başlıkları uygulanabilir. Bu sayede tek cihaz üzerinde çok farklı yayınlama modelleri yönetilebilir. CORS politikası statik ayar değil, bağlama duyarlı trafik kuralı haline gelir.
Uygulama framework bağımlılığı olmadan CORS standardı uygulanır
CORS davranışı uygulama framework'lerine dağıtıldığında her dil ve servis farklı ayar mantığı gerektirir. TR7, bu davranışı ADC katmanına taşıyarak uygulama bağımlılığını azaltır. Uygulama ekipleri yalnız API iş mantığına odaklanırken, CORS standardı merkezi olarak korunur. Legacy ve modern servisler aynı politika modeliyle yayınlanabilir.
Audit ve merkezi değişiklik yönetimi CORS riskini azaltır
CORS politikası merkezi konfigürasyon içinde değiştirildiğinde audit ve rollback süreçlerine dahil edilebilir. Kim hangi Origin'i, hangi method'u veya credentials davranışını açtı sorusu takip edilebilir. Bu özellikle güvenlik incelemelerinde önemlidir. Dağınık uygulama ayarları yerine denetlenebilir CORS yönetimi sağlanır.
Operasyonel derinlik
CORS Politika Kuralı; Origin eşleşmesi, credentials davranışı, preflight yanıtı, max-age dengesi, path kapsamı ve audit görünürlüğüyle birlikte işletilir.
Origin eşleşmesi
Gelen Origin değeri allow-list veya regex kurallarıyla karşılaştırılabilir. Eşleşme yoksa CORS başlıkları eklenmeyebilir veya politika gereğine göre reddetme davranışı uygulanabilir. Wildcard yerine açık liste kullanımı önerilir.
Credentials davranışı
Credentials aktif olduğunda cookie ve auth header gibi kimlik bilgileri cross-origin isteklerde kullanılabilir. Bu modda Origin politikasının dar ve net olması önemlidir. Credentials ile wildcard Origin birlikte güvenli bir varsayım değildir.
Preflight yanıtı
OPTIONS istekleri tarayıcının method ve header izni kontrolü için gönderilir. TR7 gerekli Allow-* başlıklarını üreterek preflight yanıtını merkezi şekilde yönetebilir. Bu, kurum servisinin gereksiz OPTIONS yüküyle uğraşmasını azaltır.
Max-age dengesi
Preflight cache süresi performans ve politika güncelliği arasında denge gerektirir. Uzun süre daha az OPTIONS trafiği üretir, fakat CORS değişiklikleri tarayıcı cache'i nedeniyle geç hissedilebilir. Kritik API'lerde bu değer dikkatle seçilmelidir.
Path kapsamı
CORS politikası belirli path veya host koşullarına bağlanabilir. Bu, aynı vService içinde farklı API yüzeylerine farklı CORS davranışı vermeyi sağlar. Admin endpoint'leri ile public endpoint'ler aynı izinlere sahip olmak zorunda değildir.
Audit kaydı
CORS politika değişiklikleri merkezi konfigürasyon ve audit sürecinde izlenebilir. Origin listesi veya credentials değişikliği güvenlik açısından önemli kabul edilmelidir. Değişiklik geçmişi rollback ve compliance için değer taşır.
Hangi senaryolarda kullanılır
Frontend API CORS hatasını uygulama koduna dokunmadan çözme
Frontend uygulama farklı domaindeki API'ye eriştiğinde tarayıcı CORS hatası alabilir. TR7 üzerinden doğru Origin, method ve header politikası eklenerek sorun merkezi olarak giderilir.
Çoklu tenant subdomain'leri için regex origin politikası
SaaS ortamında her tenant kendi subdomain'iyle frontend çalıştırabilir. Regex destekli allow-list ile tüm tenant domain ağacı kontrollü şekilde kabul edilir.
Partner API erişiminde dar origin ve header listesi
Partner uygulamalar yalnız belirli Origin ve Authorization header ile API'ye erişebilir. TR7 CORS kuralı bu izinleri merkezi olarak tanımlar ve gereksiz header/method yüzeyini kapatır.
Cookie kullanan SSO akışında credentials davranışını yönetme
SSO veya federasyon akışlarında cross-origin cookie gerekebilir. TR7 credentials toggle ve dar Origin listesiyle bu davranışı kontrollü hale getirir.
Public ve admin API path'lerinde farklı CORS uygulama
Aynı vService içinde public endpoint daha geniş, admin endpoint daha dar CORS politikasıyla çalışabilir. Bu ayrım uygulama koduna yazılmadan trafik kuralı üzerinden uygulanır.
Sık sorulanlar
TR7 CORS kuralı preflight isteklerini nasıl yönetir?
Origin allow-list wildcard kullanımına zorunlu bırakır mı?
Credentials davranışını açmak güvenli midir?
Aynı cihazda farklı API'ler için farklı CORS politikası uygulanabilir mi?
Max-Age değeri ne kadar olmalıdır?
CORS politikası uygulama framework'üne bağlı mıdır?
CORS yönetimini uygulama kodundan çıkarın
Preflight, response başlıkları, origin allow-list ve credentials davranışını tek ADC kuralından yönetin. Kendi servislerinizle canlı bir kurulumda gezdirelim.