Aynı etki alanında CORS hatası mı?


87

Şu anda garip bir CORS sorunuyla karşılaşıyorum.

İşte hata mesajı:

XMLHttpRequest cannot load http://localhost:8666/routeREST/select?q=[...] 
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

İki sunucu:

  • localhost: 8666 / routeREST /: bu basit bir Python Bottle sunucusudur.
  • localhost: 8080 /: Javascript uygulamasını çalıştırdığım Python simpleHTTPserver. Bu uygulama, yukarıdaki sunucuda Ajax isteklerini yürütmektedir.

Sorunun ne olabileceği konusunda herhangi bir fikriniz var mı?

DÜZENLE:

Ve ... sorun liman oldu. Cevaplarınız için teşekkürler :)

Herhangi biri bir Python şişe sunucusu da kullanıyorsa, CORS sorununu çözmek için bu yazıda verilen yanıtı takip edebilirsiniz: Bottle Py: jQuery AJAX istekleri için CORS'u etkinleştirme


10
Farklı bağlantı noktalarında olduklarından aynı değildir!
bazı

Bağlantı noktası numaraları farklıdır. Bu, Cross Origin kurallarını ihlal edebilir.

4
IE'nin bağlantı noktası numarasını hesaba katmadığını unutmayın.
Ray Nicholus

@some Tarayıcıların çoğu, birinde 'www' varsa ve diğerinde yoksa aynı olmadıkları sonucuna varır. Şeytan ayrıntıda gizlidir.
Nadiren 'Monica Nerede' Needy

@SeldomNeedy example.com, www.example.com, www1.example.com ve mirror.www.example.com farklı alan adlarıdır. ornek.com , ornek.com , ornek.com , ornek.com:80443'ün tümü farklı kökenlidir.
Bazı

Yanıtlar:


124

Yalnızca protokol , ana bilgisayar ve bağlantı noktası aynı ise aynı kabul edilir: Aynı Kaynak Politikası

Etkinleştirmek istiyorsanız, başlıklar ekleyerek Çapraz Kaynak Paylaşımını (cors) izlemelisiniz . Mozilla'nın örnekleri var

Yanıtınıza başlık olarak Access-Control-Allow-Origin eklemeniz gerekir. (Muhtemelen gerektiğini herkesi izin vermek için değil bunu):

Access-Control-Allow-Origin: *

Birden fazla kaynağı desteklemeniz gerekiyorsa (örneğin hem example.comve www.example.com), Access-Control-Allow-Origincevabınızda Originistekteki -header değerini ayarlayın ( Kaynağın beyaz listede olduğunu doğruladıktan sonra).

Ayrıca bazı isteklerin OPTION yöntemiyle bir ön kontrol isteği gönderdiğini unutmayın, bu nedenle kendi kodunuzu yazarsanız bu istekleri de ele almalısınız. Örnekler için Mozilla'ya bakın .


8
Bu, AJAX'ın dahil olduğu her yerde kırmızı renk, büyük harflerle ve koyu renklerle vurgulanmalıdır .
Zoltán Schmidt

5
Bu cevap bir ek sözleşme, not olarak 'Access-Control-Allow-Origin: https://example.com'ise DEĞİL eşdeğer 'Access-Control-Allow-Origin: https://www.example.com'. Sitenize her ikisi üzerinden de erişilebiliyorsa, yanıt başlıklarınızda ikisine de sahip olmalısınız.
Nadiren 'Monica Nerede' Needy

1
Hiçbir uçuş öncesi istekleri gibi basit istekleri için varsayılan olarak gönderilmesini Not GET, POSTve HEAD. Ek ayrıntılar için yanıtta bağlantısı verilen MDN makalesine bakın.
Emile Bergeron

@SeldomNeedy, yinelenen başlıklara sahip olamazsınız
Mike Flynn

@MikeFlynn Benim ifadelerim kuşkusuz bir dokunuştu, ama bunu önermeye çalışmıyordum; sunucunun isteğe göre uygun başlığı gönderecek şekilde yapılandırılması yeterlidir.
Nadiren 'Monica Nerede' Needy

30

Bağlantı noktası numaraları farklıdır.

Şema, ana bilgisayar adı veya bağlantı noktalarından herhangi biri eşleşmezse, istek alanlar arası kabul edilir.


1
443 ve 80 hariç.
Joseph Lust

17
443 ve 80 dahil
code_monk

5
Sorunun doğrulanması nasıl sorunun çözümü olabilir? Cevabı gönder ahbap.
Ritesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.