
CORS hatası alıyorum: HTTP Header ayarlarını görüntüleyerek çözüme ulaşma rehberi.
Web geliştirme dünyasında sıkça karşılaşılan, ancak çoğu zaman kafa karıştırıcı olabilen bir sorun var: CORS hatası. Bir SEO editörü olarak, sitenizin sağlıklı çalışmasının, kullanıcı deneyiminin ve dolayısıyla arama motoru sıralamalarının ne kadar önemli olduğunu biliyorum. AdSense politikalarına uygun, erişilebilir ve hızlı bir web sitesi, gelir potansiyelinizi maksimize etmenin temelidir. CORS hataları ise bu sorunsuz akışı engelleyerek, web sitenizin önemli kaynaklara erişmesini veya etkileşimde bulunmasını engelleyebilir. Bu durum, AdSense reklamlarının doğru şekilde yüklenmemesine, sitenizin işlevselliğinin aksamasına ve hatta sitenizin genel
performans analizi değerlerinin düşmesine yol açabilir.
Bu kapsamlı rehberde, CORS hatasının ne olduğunu, HTTP Header'ların bu hatanın çözümündeki kritik rolünü ve bir 'HTTP Header Görüntüleyici' kullanarak bu hatayı nasıl teşhis edip çözüme kavuşturabileceğinizi adım adım inceleyeceğiz. Amacımız, teknik bilgi seviyeniz ne olursa olsun, bu karmaşık sorunu anlaşılır bir dille açıklamak ve size pratik çözüm yolları sunmaktır.
CORS Nedir ve Neden Karşınıza Çıkar?
CORS, açılımı "Cross-Origin Resource Sharing" olan, Türkçe'ye "Çapraz Kaynak Paylaşımı" olarak çevirebileceğimiz bir güvenlik mekanizmasıdır. Temel amacı, bir web sayfasında çalışan istemci tarafı kodunun, farklı bir kaynaktan (domain, protokol veya port) kaynaklara erişmesini kontrol etmektir. Bu mekanizma, tarayıcılar tarafından uygulanan "Same-Origin Policy" (Aynı Kaynak Politikası) adı verilen daha geniş bir
web güvenliği prensibinin bir uzantısıdır.
Aynı Kaynak Politikası, bir web sayfasının yalnızca kendi kaynaklarıyla (yani aynı domain, protokol ve porttan gelen kaynaklarla) etkileşim kurmasına izin verir. Bu politika, kötü niyetli web sitelerinin kullanıcıların hassas verilerine farklı bir domain üzerinden erişmesini engelleyerek büyük bir güvenlik katmanı sağlar. Ancak modern web uygulamaları genellikle farklı sunucularda barındırılan API'lere, CDN'lerden yüklenen içeriklere veya farklı domainlerdeki hizmetlere ihtiyaç duyar. İşte tam bu noktada CORS devreye girer.
CORS, sunucuların belirli "çapraz kaynak" isteklerine güvenli bir şekilde izin vermesini sağlayarak, Aynı Kaynak Politikası'nın kısıtlamalarını esnetmenin kontrollü bir yolunu sunar. Bir CORS hatası alıyorsanız, bu genellikle tarayıcınızın, çalıştığı web sayfasının farklı bir kaynaktan bir kaynağa (örneğin bir resim, font, script veya API verisi) erişmeye çalıştığını ancak bu erişime sunucu tarafından CORS politikaları doğrultusunda izin verilmediğini gösterir. Konsolunuzda "No 'Access-Control-Allow-Origin' header is present on the requested resource." gibi bir mesaj görmeniz, bu durumun en yaygın işaretidir. Bu hata, sitenizin düzgün çalışmasını engelleyebilir ve bu da dolaylı olarak SEO'nuzu ve AdSense gelirlerinizi olumsuz etkileyebilir.
HTTP Header'lar: Web İletişiminin Temel Taşı
HTTP (Hypertext Transfer Protocol), web üzerinde veri alışverişinin temelini oluşturan protokoldür. Bir web tarayıcısı (istemci) bir web sunucusuna bir istek gönderdiğinde veya bir sunucu tarayıcıya bir yanıt gönderdiğinde, bu iletişim belirli kurallar ve bilgilerle birlikte gerçekleşir. İşte bu ek bilgiler, "HTTP Header'ları" olarak adlandırılır.
HTTP Header'ları, bir HTTP isteğinin veya yanıtının zarfı üzerindeki bilgiler gibidir. İçeriğin kendisi (örneğin bir HTML sayfası veya bir resim) zarfın içindedir, ancak zarfın üzerinde gönderenin, alıcının, içeriğin türünün, nasıl işlenmesi gerektiğinin ve diğer önemli iletişim detaylarının belirtildiği başlıklar bulunur. Bu başlıklar, istemci ve sunucu arasında karmaşık bir diyaloğun temelini oluşturur ve web uygulamalarının sorunsuz çalışması için hayati öneme sahiptir.
Örneğin, bir sunucu "Content-Type: text/html" başlığını gönderdiğinde, tarayıcı bu içeriğin bir HTML sayfası olduğunu anlar ve ona göre işler. "Cache-Control: max-age=3600" başlığı, tarayıcıya bu içeriği bir saat boyunca yerel önbelleğinde saklamasını söyler. CORS hataları söz konusu olduğunda ise, belirli HTTP Header'ları, tarayıcıya çapraz kaynak isteklerinin güvenli olup olmadığını bildiren anahtar rolü oynar. Doğru
HTTP başlıkları olmadan, sunucu ve istemci arasındaki iletişimde boşluklar oluşur ve bu da CORS gibi hatalara yol açar.
CORS ile İlgili Temel HTTP Header'lar
CORS sorunlarını çözmek için hangi HTTP başlıklarını aramanız gerektiğini bilmek çok önemlidir. İşte en sık karşılaşılan ve CORS yapılandırmasında kritik rol oynayanlar:
*
`Access-Control-Allow-Origin`: Bu başlık, bir kaynağa (örneğin bir API) hangi "origin"lerin (domainler, protokoller, portlar) erişebileceğini belirtir. Eğer tarayıcınızdan gelen isteğin origin'i, bu başlıkta belirtilenler arasında değilse veya bu başlık tamamen eksikse, bir CORS hatası alırsınız. Değeri tek bir origin (örneğin `https://www.example.com`), birden fazla origin (virgülle ayrılmış) veya tüm origin'lere izin veren `*` (yıldız) olabilir. Güvenlik nedeniyle `*` kullanımı genellikle tavsiye edilmez.
*
`Access-Control-Allow-Methods`: Bu başlık, çapraz kaynak istekleri için hangi HTTP metodlarının (GET, POST, PUT, DELETE vb.) kullanılabileceğini belirtir. Örneğin, sunucunuz yalnızca GET isteklerine izin veriyorken bir POST isteği yapmaya çalışırsanız, bu başlığın doğru yapılandırılmaması nedeniyle hata alabilirsiniz.
*
`Access-Control-Allow-Headers`: İstemcinin çapraz kaynak istekleriyle birlikte göndermesine izin verilen özel HTTP başlıklarını (örneğin `Authorization` başlığı) tanımlar.
*
`Access-Control-Allow-Credentials`: Eğer bir istek çerezler, HTTP kimlik doğrulama başlıkları veya istemci tarafı SSL sertifikaları gibi kimlik bilgilerini içeriyorsa, bu başlığın `true` olarak ayarlanması gerekir. Aksi takdirde, tarayıcı bu tür istekleri reddeder.
*
`Vary`: Genellikle `Access-Control-Allow-Origin` başlığıyla birlikte kullanılır. Eğer `Access-Control-Allow-Origin` değeri, istemcinin `Origin` başlığına göre dinamik olarak belirleniyorsa, `Vary: Origin` başlığının da gönderilmesi önbellekleme sorunlarını önler.
*
`Access-Control-Expose-Headers`: Tarayıcının, çapraz kaynak isteğine verilen yanıtta, varsayılan olarak erişebileceği başlıklar dışındaki ek başlıkları okumasına izin verir.
Bu başlıkların doğru şekilde ayarlanması,
CORS çözümü için hayati öneme sahiptir. Yanlış veya eksik bir yapılandırma, sitenizin kaynaklara erişimini engelleyerek sorunlara yol açar.
HTTP Header'ları Nasıl Görüntülersiniz? (HTTP Header Görüntüleyici Kullanımı)
CORS hatalarını teşhis etmenin ilk ve en önemli adımı, ilgili HTTP isteklerinin ve yanıtlarının başlıklarını görüntülemektir. Neyse ki, bu işlemi gerçekleştirmek için güçlü ve erişilebilir araçlar mevcuttur. En yaygın ve etkili yöntemler şunlardır:
1. Tarayıcı Geliştirici Araçları
Modern web tarayıcılarının tamamı, yerleşik geliştirici araçlarına sahiptir ve bunlar arasında en güçlü özelliklerden biri "Network" (Ağ) sekmesidir. Bu sekme, sayfanızın yüklendiği tüm HTTP isteklerini ve yanıtlarını detaylı bir şekilde görmenizi sağlar.
*
Nasıl Açılır:*
Google Chrome: F12 tuşuna basın veya sağ tıklayıp "İncele" (Inspect) seçeneğini seçin.
*
Mozilla Firefox: F12 tuşuna basın veya sağ tıklayıp "Öğeyi İncele" (Inspect Element) seçeneğini seçin.
*
Microsoft Edge: F12 tuşuna basın veya sağ tıklayıp "İncele" (Inspect) seçeneğini seçin.
*
Safari: Safari menüsünden "Tercihler" (Preferences) > "Gelişmiş" (Advanced) sekmesine gidin ve "Menü çubuğunda Geliştir menüsünü göster" (Show Develop menu in menu bar) seçeneğini işaretleyin. Ardından "Geliştir" (Develop) menüsünden "Web Denetçisini Göster" (Show Web Inspector) seçeneğini seçin.
*
Nasıl Kullanılır:1. Geliştirici araçları açıldıktan sonra, üst menüden
"Network" (Ağ) sekmesine tıklayın.
2. Sayfayı yeniden yükleyin (Ctrl+R veya F5). Bu, tüm isteklerin Network sekmesinde listelenmesini sağlayacaktır.
3. CORS hatası veren veya şüphelenilen kaynağın isteğini (genellikle konsolda belirtilir) listede bulun ve üzerine tıklayın.
4. Sağdaki veya alttaki panelde "Headers" (Başlıklar) sekmesine gidin. Burada iki ana bölüm göreceksiniz:
*
Request Headers (İstek Başlıkları): Tarayıcınızın sunucuya gönderdiği başlıklar. Burada `Origin` başlığını arayabilirsiniz.
*
Response Headers (Yanıt Başlıkları): Sunucunun tarayıcınıza geri gönderdiği başlıklar. İşte burada `Access-Control-Allow-Origin`, `Access-Control-Allow-Methods` vb. CORS ile ilgili başlıkları arayacaksınız.
5. Özellikle `OPTIONS` metoduyla yapılan preflight (ön kontrol) isteklerini de kontrol etmeyi unutmayın. CORS politikaları, bazı karmaşık isteklerden önce tarayıcının sunucuya bir `OPTIONS` isteği göndererek izin almasını gerektirir. Bu isteklerin yanıt başlıklarını incelemek de çok önemlidir.
2. Online HTTP Header Görüntüleyici Araçlar
Bazı web siteleri, belirli bir URL'ye yapılan isteğin HTTP başlıklarını görüntülemenizi sağlayan araçlar sunar. Örneğin, `curl.traceload.com` veya `reqbin.com` gibi platformlar, girdiğiniz URL'nin sunucu yanıt başlıklarını hızlıca görmenizi sağlar. Bu araçlar, sunucu tarafında yapılandırma kontrolü yaparken veya tarayıcıdan bağımsız bir görünüm elde etmek istediğinizde faydalı olabilir.
3. Komut Satırı Araçları
Teknik kullanıcılar için `curl` gibi komut satırı araçları da HTTP başlıklarını görüntülemek için kullanılabilir. Örneğin, `curl -I https://api.example.com/data` komutu, belirtilen URL'ye bir HEAD isteği gönderir ve yalnızca yanıt başlıklarını döndürür. Bu yöntem, sunucu tarafında hızlı testler yapmak için oldukça etkilidir.
Bu araçlar, sitenizin
web performansı ve güvenlik denetimlerinde de kritik rol oynar. Hangi yöntemi seçerseniz seçin, anahtar nokta, ilgili isteğin yanıt başlıklarında CORS ile ilgili anahtar kelimeleri (Access-Control-Allow-Origin, Access-Control-Allow-Methods vb.) aramak ve doğru yapılandırmanın olup olmadığını kontrol etmektir.
CORS Hatasını HTTP Header'ları Kullanarak Çözümleme Adımları
CORS hatasıyla karşılaştığınızda paniklemeyin. Adım adım bir yaklaşımla, HTTP başlıklarını kullanarak sorunun kaynağını bulabilir ve çözüme ulaşabilirsiniz.
1. Hatayı Tespit Edin ve Kaynağı Belirleyin
Tarayıcınızın geliştirici konsolunu (F12 > Console) açın. Burada genellikle kırmızı renkte, hatanın türünü ve hangi URL için oluştuğunu belirten bir mesaj görürsünüz. Örneğin:
`Access to XMLHttpRequest at 'https://api.example.com/data' from origin 'https://www.yourwebsite.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.`
Bu mesaj, `https://www.yourwebsite.com` adresinden `https://api.example.com/data` adresine yapılan isteğin engellendiğini ve `Access-Control-Allow-Origin` başlığının eksik olduğunu açıkça belirtir.
2. İlgili İsteği Ağ Sekmesinde Bulun
Geliştirici araçlarının "Network" (Ağ) sekmesine gidin. Sayfayı yeniden yükleyin ve konsolunuzda gördüğünüz hata mesajındaki URL'yi arayarak ilgili isteği bulun. Genellikle, engellenen istek kırmızı renkte veya hatalı bir durum koduyla (örneğin 4xx veya 5xx) işaretlenir.
3. Yanıt Başlıklarını İnceleyin (`Response Headers`)
Bulduğunuz isteğe tıklayın ve "Headers" (Başlıklar) sekmesine geçin. Özellikle "Response Headers" (Yanıt Başlıkları) bölümüne odaklanın.
*
`Access-Control-Allow-Origin` başlığını arayın.*
Eksik mi? Eğer bu başlık yoksa, sunucunuz CORS politikalarını belirtmiyor demektir. Bu, en yaygın CORS hatası nedenidir.
*
Yanlış mı? Eğer başlık varsa, değeri `Origin` (İstek Başlıkları bölümündeki sizin web sitenizin URL'si) ile eşleşiyor mu? Örneğin, sizin siteniz `https://www.yourwebsite.com` iken, `Access-Control-Allow-Origin` sadece `https://anotherdomain.com` veya `*` (ancak * genellikle güvenli olmayabilir) belirtiyorsa, problem buradadır.
* Eğer dinamik bir origin yapılandırması varsa, `Vary: Origin` başlığının da olup olmadığını kontrol edin.
4. Preflight İsteklerini (OPTIONS) Kontrol Edin
Eğer tarayıcınız karmaşık bir CORS isteği yapıyorsa (örneğin `PUT`, `DELETE` metodları veya özel başlıklar içeren istekler), asıl isteği göndermeden önce bir `OPTIONS` (preflight) isteği gönderir. Bu, sunucunun CORS politikalarını önceden öğrenmek içindir.
* Ağ sekmesinde, asıl isteğinizden hemen önce `OPTIONS` metoduyla yapılan bir isteği arayın.
* Bu `OPTIONS` isteğinin yanıt başlıklarını inceleyin. Sunucunun bu isteğe doğru `Access-Control-Allow-Origin`, `Access-Control-Allow-Methods` ve `Access-Control-Allow-Headers` başlıklarıyla yanıt vermesi kritik öneme sahiptir. Eğer `OPTIONS` isteği başarısız olursa veya bu başlıkları içermezse, asıl istek de engellenecektir.
5. Diğer CORS Header'larını Doğrulayın
Eğer `Access-Control-Allow-Origin` doğru görünüyorsa, diğer CORS ilgili başlıkları da kontrol edin:
*
`Access-Control-Allow-Methods`: İsteğinizin metodu (GET, POST vb.) bu başlıkta listeleniyor mu?
*
`Access-Control-Allow-Headers`: İsteğiniz özel başlıklar içeriyorsa, bu başlıklar `Access-Control-Allow-Headers` içinde izin verilenler arasında mı?
*
`Access-Control-Allow-Credentials`: İstek kimlik bilgileri (çerezler gibi) içeriyorsa, bu başlık `true` olarak ayarlanmış mı?
6. Sunucu Tarafı Yapılandırmayı Anlayın
CORS başlıkları, sunucu tarafından yapılandırılır. Bu, web sunucunuzun (Apache, Nginx vb.) veya arka uç uygulamanızın (Node.js, Python, PHP, Java vb.) bu başlıkları yanıtına eklemesi gerektiği anlamına gelir.
*
Çözüm: Tespit ettiğiniz eksik veya yanlış başlıkları sunucunuzun veya uygulamanızın yapılandırmasına eklemeniz gerekecektir.
* Örneğin, Apache için `.htaccess` dosyasına veya Nginx için sunucu bloğuna `add_header Access-Control-Allow-Origin "https://www.yourwebsite.com";` gibi kurallar eklenir.
* API kullanıyorsanız, API'nin geliştiricisi veya siz, API'nin döndürdüğü yanıtlara uygun CORS başlıklarını eklemelisiniz.
Bu adımlar,
CORS hatası giderme sürecinde size yol gösterecek ve sorunun kökenini bulmanızı sağlayacaktır. Sorun hala devam ediyorsa, genellikle sunucu yapılandırması veya arka uç kodunuzda bir düzenleme yapılması gerektiği anlamına gelir.
Sık Görülen CORS Yapılandırma Hataları ve Çözüm Önerileri
CORS hatalarının çoğu, sunucu tarafındaki yanlış veya eksik yapılandırmalardan kaynaklanır. İşte sıkça karşılaşılan bazı senaryolar ve çözüm önerileri:
1.
`Access-Control-Allow-Origin` Başlığının Eksik Olması veya Yanlış Ayarlanması:*
Problem: Sunucu, tarayıcının istek attığı domainin (Origin) kaynaklara erişmesine izin vermediğini belirten bu başlığı hiç göndermez veya yanlış bir domaini belirtir. Örneğin, `https://api.example.com` yalnızca `https://mysite.com` adresinden gelen isteklere izin verirken, isteğiniz `https://www.anothersite.com` adresinden geliyordur.
*
Çözüm: Sunucu tarafında, `Access-Control-Allow-Origin` başlığını, isteği yapan web sitenizin tam URL'siyle (protokol dahil) eşleşecek şekilde ayarlayın. Eğer birden fazla güvenilir domain varsa, bunları dinamik olarak Origin başlığına göre kontrol eden bir yapılandırma kurun. `*` (yıldız) kullanmak tüm origin'lere izin verir ancak
güvenlik riski taşıdığı için dikkatli olunmalıdır. Yalnızca herkese açık API'ler için düşünülebilir.
2.
`OPTIONS` (Preflight) İsteklerine Yanıt Verilmemesi veya Yanlış Yanıt Verilmesi:*
Problem: Karmaşık CORS isteklerinden önce (PUT, DELETE, custom headers vb.), tarayıcı bir `OPTIONS` isteği gönderir. Eğer sunucu bu `OPTIONS` isteğine uygun CORS başlıklarıyla (özellikle `Access-Control-Allow-Methods`, `Access-Control-Allow-Headers`, `Access-Control-Max-Age`) yanıt vermezse, asıl istek asla gönderilmez.
*
Çözüm: Sunucunuzun `OPTIONS` metoduna yanıt verebildiğinden ve bu yanıtta gerekli CORS başlıklarını içerdiğinden emin olun. Genellikle bu, web sunucusunun (Nginx, Apache) veya uygulama çerçevesinin (Express.js, Django vb.) yapılandırma dosyalarında ele alınır.
3.
Yanlış `Access-Control-Allow-Methods` veya `Access-Control-Allow-Headers`:*
Problem: API'nize bir `POST` isteği göndermeye çalışıyorsunuz ancak `Access-Control-Allow-Methods` başlığı yalnızca `GET` ve `HEAD` metodlarına izin veriyor. Ya da isteğinizde `X-Custom-Header` gibi özel bir başlık kullanıyorsunuz, ancak bu başlık `Access-Control-Allow-Headers` içinde belirtilmemiş.
*
Çözüm: İsteğinizde kullandığınız HTTP metodlarının ve özel başlıkların, sunucunun `Access-Control-Allow-Methods` ve `Access-Control-Allow-Headers` başlıklarında listelendiğinden emin olun.
4.
Kimlik Bilgileriyle (`Credentials`) İlgili Sorunlar:*
Problem: İstemci tarafında `withCredentials = true` ile bir istek gönderiyorsunuz (yani çerezler veya kimlik doğrulama başlıkları dahil ediliyor), ancak sunucu yanıtında `Access-Control-Allow-Credentials: true` başlığı eksik.
*
Çözüm: Eğer isteğiniz kimlik bilgileri içeriyorsa, sunucunun yanıtında `Access-Control-Allow-Credentials: true` başlığının bulunması gerekir.
Dikkat: `Access-Control-Allow-Origin` değeri `*` iken `Access-Control-Allow-Credentials: true` kullanılamaz; bu durumda Origin başlığının belirli bir domain olması zorunludur.
5.
Önbellekleme Sorunları (`Vary: Origin` Eksikliği):*
Problem: Sunucu `Access-Control-Allow-Origin` başlığını dinamik olarak, isteğin `Origin` başlığına göre ayarlıyor, ancak `Vary: Origin` başlığı eksik. Bu, önbelleklerin yanlış `Access-Control-Allow-Origin` başlığına sahip yanıtları depolamasına ve sunmasına neden olabilir.
*
Çözüm: Dinamik `Access-Control-Allow-Origin` kullanıyorsanız, sunucu yanıtına `Vary: Origin` başlığını ekleyerek önbellekleme proxy'lerine bu yanıtın origin'e göre değiştiğini bildirin.
Bu tür bir sorunu derinlemesine anlamak için, '/makale.php?sayfa=web-guvenligi-onemleri' sayfamızı ziyaret edebilirsiniz. Ayrıca, sitenizin
SEO performansını ve erişilebilirliğini artırmaya yönelik diğer teknik detaylar için '/makale.php?sayfa=teknik-seo-rehberi' linkimize göz atmanız faydalı olacaktır. Doğru
HTTP başlıkları yapılandırması, sitenizin sorunsuz çalışmasının anahtarıdır.
Sonuç: Sorunsuz Bir Web Deneyimi İçin Header'ların Gücü
CORS hataları, ilk bakışta korkutucu ve çözülmesi zor görünebilir. Ancak, bu rehberde de gördüğünüz gibi, sorunun kökenini anlamak ve doğru araçları kullanarak HTTP başlıklarını incelemek, çözümün anahtarıdır. Bir SEO editörü olarak, sitenizin teknik sağlığının genel performansınız ve AdSense gibi gelir kaynaklarınız üzerindeki etkisini asla küçümsemeyin. Engellenen kaynaklar, işlevsiz bir kullanıcı deneyimi ve dolayısıyla düşük sıralamalar anlamına gelebilir.
HTTP Header'lar, web üzerindeki iletişimin görünmez elçileridir. Onları okumayı ve yorumlamayı öğrenmek, sadece CORS hatalarını gidermekle kalmaz, aynı zamanda sitenizin önbellekleme stratejilerini, güvenlik önlemlerini ve genel
kullanıcı deneyimi optimizasyonunu anlamanıza da yardımcı olur. Tarayıcınızın geliştirici araçları, cebinizde taşıdığınız güçlü bir 'HTTP Header Görüntüleyici'dir ve onu etkin bir şekilde kullanmak, sizi birçok teknik sorundan kurtaracaktır.
Unutmayın, web dünyasında her şey doğru yapılandırılmış HTTP Header'lar üzerine kuruludur. Bu rehber sayesinde CORS hatalarını teşhis etme ve çözme konusunda daha donanımlı olduğunuzu umuyorum. Sorunsuz bir web sitesi, mutlu kullanıcılar ve istikrarlı bir gelir demektir!
Yazar: Tarkan Tevetoğlu
Ben Tarkan Tevetoğlu, bir Akademisyen ve Araştırmacı. Platformumuzda teknolojiyi herkes için anlaşılır kılmak, karmaşık konuları basitleştirerek okuyucularımızın günlük yaşamında pratik olarak kullanabileceği bilgiler sunmak, yeni beceriler kazandırmak, farkındalık oluşturmak ve teknoloji dünyasındaki gelişmeleri anlaşılır bir dille aktarmak amacıyla yazıyorum.