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
Reason: CORS request not HTTP mesajı, CORS kapsamında istenen kaynağın HTTP veya HTTPS dışında bir URL şeması kullandığını gösterir. Yerel bir HTML dosyasından fetch("./data.json") çağırdığınızda hedef file:///.../data.json oluyorsa bu durumla karşılaşabilirsiniz. Yerel geliştirmede dosyaları bir HTTP sunucusundan sunmak, sayfanın ve kaynağın normal bir web origin’i üzerinden yüklenmesini sağlar.

Bir dosyayı çift tıklayarak açmak ile yerel HTTP sunucusunda açmak farklıdır. Aynı klasörde duran dosyalar bile tarayıcı tarafından güvenilir, ortak bir origin olarak ele alınmayabilir. İstenen kaynağın gerçek adresini Console ve Network bilgilerinden belirleyin; yalnız kısa hata etiketine bakarak sunucunun bütün CORS ayarlarını değiştirmeyin.

Dosya şemasını normal API hatasından ayırın​


file:///proje/index.html içinden göreli bir JSON yolu kullanırsanız tarayıcı o yolu yerel dosya adresine göre çözer. Buna karşılık aynı dosyadan HTTPS üzerindeki bir API’ye istek yapmak, otomatik olarak bu özel hatanın oluşacağını kanıtlamaz: istek origin’i, API izni ve tarayıcı davranışına bağlı başka bir CORS hatası görülebilir. HTTP bir API’de Allow-Origin eksikliği ile HTTP dışı hedef URL aynı sorun değildir.

İnternete bağımlı olmayan küçük test​


Boş bir geliştirme klasöründe index.html ve data.json adında iki dosya hazırlayın. HTML dosyası:

HTML:
<!doctype html>
<html lang="tr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Yerel HTTP testi</title>
</head>
<body>
  <p id="sonuc">Yanıt bekleniyor.</p>
  <script>
    fetch("./data.json")
      .then(response => {
        if (!response.ok) throw new Error("HTTP " + response.status);
        return response.json();
      })
      .then(data => {
        document.querySelector("#sonuc").textContent = data.mesaj;
      })
      .catch(error => {
        document.querySelector("#sonuc").textContent = error.message;
      });
  </script>
</body>
</html>

data.json içeriği:

JSON:
{"mesaj":"Yerel HTTP isteği başarılı."}

Python 3 kuruluysa terminali yalnız bu test dosyalarının bulunduğu klasörde açın ve şu geliştirme sunucusunu başlatın:

Bash:
python -m http.server 8000 --bind 127.0.0.1

Kurulumunuz Python’u python3 adıyla çalıştırıyorsa komutun başını buna göre değiştirin. Sunucu yalnız yerel makineyi dinler; üretim barındırması için tasarlanmamıştır. Tarayıcıda http://127.0.0.1:8000/index.html adresini açın. Sayfa ve JSON aynı origin’den yüklendiği için bu örnekte ayrıca çapraz origin izni gerekmez.

Beklenen sonuç ve karar​


Sayfada “Yerel HTTP isteği başarılı.” yazısını, Network’te data.json için başarılı yanıtı görmelisiniz. Bu sonuç yalnız yerel örneğin çalıştığını doğrular; başka bir API’nin erişim politikasını kanıtlamaz.

Görülen durumAnlamıSonraki kontrol
Hedef file şemasıKaynak yerel dosya olarak isteniyorDosyayı HTTP sunucusundan sunun
Bağlantı reddedildiYerel sunucu dinlemiyor olabilirTerminal, port ve başlatılan klasör
data.json için 404İstenen dosya bulunamadıDosya adı ve göreli yol
JSON ayrıştırma hatasıGövde geçerli JSON olmayabilirYanıt HTML mi, JSON sözdizimi doğru mu?
Harici API’de Allow-Origin eksikAyrı CORS politikası sorunuAPI’nin izinli frontend origin’i

Hata devam ederse​


Sayfayı eski file adresinden açmadığınızı kontrol edin. Göreli yolu HTTP adresine göre değerlendirin ve yönlendirme varsa son hedefin şemasına bakın. HTTPS sayfanın HTTP kaynağa erişmesi karma içerik nedeniyle ayrıca engellenebilir; API’yi desteklemediği hâlde sadece başına HTTPS yazmak geçerli çözüm değildir.

Tarayıcı güvenliğini kapatmak veya no-cors eklemek yerel dosya modelini düzeltmez. no-cors ile elde edilen opak yanıtın JSON gövdesini normal biçimde okuyamazsınız. Sorunu, kaynağın sunulma biçimi ile gerçek API izinlerini ayrı tutarak inceleyin.

Sık sorulan sorular​


Python sunucusu PHP kodunu da çalıştırır mı?​


Bu basit http.server kullanımı statik dosyalar içindir; PHP uygulamasının çalıştığını göstermez. PHP gerekiyorsa onun çalışma ortamını ayrıca hazırlayın. Yukarıdaki test yalnız HTML ve JSON kullanır.

localhost yerine 127.0.0.1 kullanınca API izni etkilenir mi?​


Evet, bunlar origin karşılaştırmasında farklı ana makine adlarıdır. Harici API kullanıyorsanız izin listesi, sayfanın gerçekten açıldığı şema, ana makine ve portla uyumlu olmalıdır.
 

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.
Robotlar:
  • Anthropic