Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

Cloudflare CORS hatası nedir?​


Cloudflare arkasındaki bir API’de CORS hatası, yanıtın origin uygulamasından mı yoksa Cloudflare katmanından mı geldiği ayrılarak çözülür. Önce isteğin gerçekten API sunucusuna ulaşıp ulaşmadığını kontrol edin. Yanıt bir Cloudflare güvenlik sayfası, yönlendirme, hata sayfası veya eksik OPTIONS yanıtıysa sorun origin sunucusu ile Cloudflare arasındaki yapılandırmada aranmalıdır.

CORS, farklı kaynaktan gelen yanıtın JavaScript tarafından okunmasını düzenler; API için kimlik doğrulama veya ağ erişim denetimi değildir. Örneğin https://app.example.com üzerinden https://api.example.com adresine yapılan istek farklı origin kabul edilir. API yanıtı, izin verilen origin'i açıkça belirtmelidir:

Kod:
Access-Control-Allow-Origin: https://app.example.com

İstek özel bir HTTP yöntemi veya özel başlık içeriyorsa tarayıcı önce OPTIONS yöntemiyle preflight isteği gönderir. API bu isteğe uygun durum kodu ve başlıklarla cevap vermezse asıl GET veya POST isteği hiç gönderilmeyebilir.

Önce hatanın kaynağını ayırın​


Tarayıcı geliştirici araçlarında Network sekmesini açın ve başarısız isteği inceleyin. Özellikle istek yöntemi, durum kodu, Response Headers bölümü ve varsa OPTIONS isteği kontrol edilmelidir. Aşağıdaki ayrım, hangi katmanda düzeltme yapacağınızı gösterir:

Gözlenen durumMuhtemel nedenİlk işlem
Yanıtta CORS başlığı yokOrigin uygulaması başlık üretmiyorCORS politikasını API sunucusunda düzeltin
OPTIONS başarısız veya 404Preflight yöntemi işlenmiyorOPTIONS isteğine açık yanıt verin
Yanıt HTML güvenlik veya doğrulama sayfasıCloudflare kuralı isteği durduruyorOlayı güvenlik kayıtlarında inceleyin
301/302 yönlendirmesiHTTP-HTTPS veya yanlış API yoluİstemcinin doğrudan doğru HTTPS uç noktasını kullanmasını sağlayın
Kimlik bilgileriyle birlikte yıldız başlığıCORS protokolüyle uyumsuz yanıtOrigin'i açıkça belirtin; yıldız kullanmayın

Cloudflare yalnızca DNS/proxy katmanında bulunuyorsa kalıcı çözüm genellikle origin uygulamasındadır. Ancak Worker, Transform Rule, cache kuralı, yönlendirme veya güvenlik kuralı yanıtı değiştiriyorsa Cloudflare katmanı da kontrol edilmelidir.

Uygulanabilir teşhis adımları​


  1. İstemcinin gerçek origin'ini belirleyin. Şema, alan adı ve port birlikte değerlendirilir; http://app.example.com ile https://app.example.com aynı origin değildir.
  2. Network kaydında önce OPTIONS isteği olup olmadığını kontrol edin. Bu istek varsa Access-Control-Allow-Origin, Access-Control-Allow-Methods ve gerekiyorsa Access-Control-Allow-Headers başlıklarını arayın.
  3. İsteği tarayıcıdan bağımsız test edin. Kendi API adresinizi ve istemci origin'inizi kullanarak şu komutu çalıştırın:
    Kod:
    curl -i -X OPTIONS https://api.example.com/resource \
      -H 'Origin: https://app.example.com' \
      -H 'Access-Control-Request-Method: POST' \
      -H 'Access-Control-Request-Headers: Content-Type, Authorization'
  4. Başarılı bir preflight yanıtında, kullanılan origin'e izin veren Access-Control-Allow-Origin başlığı ve istenen yöntemi/başlıkları karşılayan izinler bulunmalıdır. Yanıt Cloudflare HTML'i, bir yönlendirme veya 4xx/5xx durum koduysa origin uygulaması ile Cloudflare kuralını ayrı ayrı inceleyin.
  5. CORS politikasını origin uygulamasında düzeltin. İzin verilen origin'i sabit ve açık tanımlayın; üretimde gelen Origin değerini kontrol etmeden aynen geri yansıtmayın.
  6. Çerez gibi tarayıcı kimlik bilgileri gönderilecekse istemcinin credentials seçeneğini, açık origin’i ve Access-Control-Allow-Credentials: true başlığını birlikte yapılandırın. Elle eklenen Authorization başlığı için ise ilgili preflight başlık iznini ayrıca kontrol edin. Access-Control-Allow-Origin: * bu kullanım için geçerli değildir.
  7. Cloudflare arkasında bir Worker veya yanıtı değiştiren başka bir kural varsa aynı başlıkların normal yanıtta da korunduğunu kontrol edin. Düzeltmeden sonra yeni bir preflight ve asıl istek kaydıyla tekrar test edin.

Beklenen sonuç, OPTIONS yanıtının API'den beklenen durum koduyla dönmesi ve tarayıcının istediği CORS başlıklarını içermesidir. Bu sağlandığı halde hata sürüyorsa asıl isteğin yanıtını inceleyin; CORS başlıkları yalnız preflight yanıtında değil, tarayıcının okuyacağı asıl yanıtta da bulunmalıdır. Yanıt 403, 429 veya 5xx ise yalnız CORS başlığı eklemek asıl erişim sorununu çözmez.

Cloudflare Access ve CDN önbelleğini ayrı kontrol edin​


Access ile korunan bir API’ye gönderilen preflight, tarayıcı tasarımı gereği oturum çerezini taşımaz. Bu nedenle kullanıcı giriş yapmış olsa bile Access katmanı OPTIONS isteğini 403 ile durdurabilir. Access uygulamasının CORS ayarlarında, OPTIONS’u origin’e iletme veya Cloudflare’ın uygun preflight yanıtını üretmesi seçeneklerinden mimarinize uygun olanını değerlendirin. Bu işlem asıl API isteğinin kimlik doğrulamasını kaldırmamalıdır; yalnız ilgili uygulama ve kaynakları kapsasın.

Origin’de başlığı düzelttiğiniz hâlde CDN eski değeri gösteriyorsa yalnız normal URL temizliğine güvenmeyin. Cloudflare’ın resmî CORS önbellek yönergesine göre ilgili kaynağın URL’sini değiştirmek veya gerekli başlıklarla hedefli temizleme yapmak gibi yöntemlerle yeni başlıkların çekildiğini doğrulayın. Önce yalnız etkilenen kaynağı inceleyin; bütün site önbelleğini gereksiz yere boşaltmayın.

Cloudflare proxy’sini kapatmak yerine Ray ID, istek zamanı, yanıt gövdesi ve güvenlik olayını eşleştirerek hangi kuralın yanıt verdiğini belirleyin. Worker, Transform Rule ve origin aynı CORS başlığını ayrı ayrı ekliyorsa birden fazla çelişkili değer de oluşabilir; politikayı hangi katmanın yönettiğini netleştirin.

Sık sorulan sorular​


CORS hatası yalnızca aynı alan adında çalışıyor, alt alan adında neden çıkıyor?​


Alt alan adları farklı origin sayılır. API, sayfanın bulunduğu origin'i izin verilenler arasına almalı; ayrıca kullanılan şema ve port da doğru olmalıdır.

Cloudflare SSL ayarı CORS hatasına neden olabilir mi?​


SSL uyumsuzluğu çoğunlukla CORS'tan önce bağlantı veya yönlendirme hatası oluşturur. Tarayıcıda görülen son yanıtın gerçekten API yanıtı mı, yoksa yönlendirme/hata sayfası mı olduğunu kontrol etmeden yalnız CORS başlıklarını değiştirmeyin.

CORS başlığını yalnızca frontend kodunda ekleyebilir miyim?​


Hayır. Tarayıcının güvenlik kararı sunucunun yanıt başlıklarına göre verilir. Frontend kodu isteğin bazı özelliklerini değiştirebilir; izin başlıklarını API veya onu temsil eden güvenilir sunucu katmanı döndürmelidir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.