CORS Test Aracı
CORS hataları, tarayıcı konsolundaki “klasik” kırmızıdır: farklı bir kökenden bir API’ye istek atarsınız ve tarayıcı yanıtı engeller. Bu test aracı, yapıştırdığınız herhangi bir URL’ye seçtiğiniz köken ve yöntemle bir preflight OPTIONS isteği gönderir, ardından Access-Control-* başlıklarını çözerek sunucunun neye izin verdiğini, neyi engellediğini ve tarayıcının neden şikâyet ettiğini tam olarak görmenizi sağlar.
CORS nasıl test edilir
-
1
Hedef URL'yi girin
Ön uçtan çağırmak istediğiniz API uç noktası. Sorgu dizesini ve protokolü ekleyin.
-
2
Yöntemi ve kökeni (origin) ayarlayın
GET/POST/PUT/DELETE/PATCH. Köken, sitenizin URL'si veya simüle etmek istediğiniz herhangi bir köken olabilir.
-
3
Preflight'i anlayın
Araç, seçtiğiniz köken ve yöntemle, ayrıca Access-Control-Request-Headers: Content-Type başlığıyla her zaman bir OPTIONS isteği gönderir; bu, tarayıcının bir JSON isteğinden önce gönderdiği preflight'ın aynısıdır.
-
4
Testi çalıştırın
Araç preflight'ı gönderir ve HTTP durumunu ve CORS yanıt başlıklarını raporlar: Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials ve Max-Age.
-
5
Yanlış yapılandırmayı düzeltin
Rapor, neyin eksik veya yanlış olduğunu işaretler, eksik Allow-Origin, yasak başlık, izin verilmeyen yöntem.
Önemli başlıklar
| Başlık | Ne işe yarar |
|---|---|
| Access-Control-Allow-Origin | Hangi kökenlerin yanıtı okuyabileceği |
| Access-Control-Allow-Methods | Preflight: hangi yöntemlere izin verildiği |
| Access-Control-Allow-Headers | Preflight: hangi istek başlıklarına izin verildiği |
| Access-Control-Allow-Credentials | Çerezlere/kimlik doğrulamaya izin verilip verilmediği |
| Access-Control-Expose-Headers | JS’in okuyabileceği yanıt başlıkları |
| Access-Control-Max-Age | Preflight sonucunun ne kadar süre önbelleğe alınacağı |
Basit istekler vs. preflight gerektiren istekler
Bir istek yalnızca şunların tümü doğruysa “basit”tir (preflight yok):
- Yöntem GET, HEAD veya POST’tur.
- Başlıklar yalnızca Accept, Accept-Language, Content-Language, Content-Type (belirli değerlerle) ile sınırlıdır.
- Content-Type, varsa, application/x-www-form-urlencoded, multipart/form-data veya text/plain’dir.
Bunun dışındaki her şey, bir JSON gövdesi, bir Authorization başlığı, özel bir X-Foo başlığı, bir PUT/DELETE/PATCH, bir preflight OPTIONS tetikler. Sunucu, preflight’a doğru Allow-* başlıklarıyla yanıt vermelidir; aksi takdirde gerçek istek hiçbir zaman gönderilmez.
Yaygın CORS hataları
- “No Access-Control-Allow-Origin header” → sunucu bu başlığı ayarlamıyor. İstemcide değil, sunucuda düzeltin.
- “Credentials mode requires Allow-Origin not to be *” → çerez gönderiyorsanız
Allow-Originbelirli bir köken olmalıdır (ya da Origin başlığını geri yansıtmalıdır). - “Request header X not allowed” → preflight yanıtında
Access-Control-Allow-Headerslistesine X’i ekleyin. - “Method not allowed” → yöntemi
Access-Control-Allow-Methodslistesine ekleyin. - “Redirect not allowed in preflight” → preflight yönlendirmeleri izleyemez. OPTIONS uç noktası doğrudan yanıt vermelidir.
Allow-Origin: * vs. Origin’i geri yansıtmak
Access-Control-Allow-Origin: * esnektir ancak kimlik bilgileriyle birlikte kullanılamaz. Üretimde, isteğin Origin’ini (bir izin listesine göre doğruladıktan sonra) geri yansıtın ve çerez gerekiyorsa Allow-Credentials: true olarak ayarlayın.
Geçici çözüm olarak proxy kullanmak
Sunucuyu denetleyemiyorsanız, kendi alan adınızdaki ince bir proxy CORS’u tamamen ortadan kaldırır, tarayıcı bunu same-origin olarak görür. Birçok barındırma platformu (Vercel, Netlify, Cloudflare) tam da bunun için yeniden yazma (rewrite) kuralları sunar.
Sık Sorulan Sorular
Kötü niyetli bir sayfanın, tarayıcınızın çerezlerini kullanarak başka bir sitedeki özel verileri okumasını önlemek için. CORS olmasaydı, evil.com’u ziyaret etmek bu sitenin bankanızın iç API’sine sizin adınıza istek atmasına izin verebilirdi. CORS, bankayı çapraz kökenli okumalara açıkça izin vermeye zorlar.
Yalnızca geliştirme sırasında. Chromium’da bir --disable-web-security bayrağı vardır ama tüm siteleri etkiler ve tehlikelidir. Doğru çözüm, sunucu tarafı başlıklar veya bir proxy’dir.
Postman bir tarayıcı değildir, CORS’u tamamen yok sayar. CORS yalnızca tarayıcılar tarafından JavaScript istekleri için uygulanır. Postman’de çalışan bir sunucu otomatik olarak CORS açısından doğru değildir.
Görseller ve klasik <script> etiketleri CORS olmadan çapraz kökenli yüklenir, ancak JS içeriklerini okuyamaz. <img crossorigin> ve fetch() ise CORS’u uygular; bu yüzden canvas üzerine çizilen görseller, CORS olmadan “kirlenmiş” (tainted) hâle gelir.
İlgili Araçlar
E-posta Üstbilgisi Analiz Aracı
Ham e-posta üstbilgilerini tarayıcınızda gizlilikle analiz edin. Mesajı yüklemeden Received geçişlerini, süreleri ve SPF, DKIM, DMARC, ARC verilerini inceleyin.
DNS Sorgusu
Terminal açmadan herhangi bir alan adının A, AAAA, MX, TXT, NS, CNAME ve SOA DNS kayıtlarını sorgulayın.
Hız testi
Tarayıcıda hızlı, ücretsiz bir internet hız testi yapın. İndirme hızınızı Mbps cinsinden, ayrıca gecikme ve jitter değerini ölçün ve bağlantınızın 4K yayın, oyun ve görüntülü görüşmelere hazır olup olmadığını görün. Uygulama ve kayıt gerektirmez.
IP adresi sorgulama
Herkese açık bir IPv4 veya IPv6 adresini sorgulayarak yaklaşık ülke, bölge, şehir, koordinat, ISS, ASN, kuruluş ve saat dilimini görün.
API Endpoint Kontrol Aracı
CORS izni olan bir HTTP veya HTTPS endpointini tarayıcıdan test edin. Son durumu, açılan başlıkları, süreyi ve sınırlı gövde önizlemesini inceleyin.
WHOIS Sorgulama
Bir alan adının herkese açık WHOIS kayıt verilerini sorgulayın: kayıt firması, ad sunucuları, durum kodları ve sona erme tarihleri.