Błąd CORS w tej samej domenie?

86

Mam teraz dziwny problem z CORS.

Oto komunikat o błędzie:

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

Dwa serwery:

  • localhost: 8666 / routeREST /: to jest prosty serwer butelek Pythona.
  • localhost: 8080 /: Python simpleHTTPserver, na którym uruchamiam aplikację Javascript. Ta aplikacja wykonuje żądania Ajax na serwerze powyżej.

Czy zastanawiałeś się, co może być problemem?

EDYTOWAĆ:

I ... port był problemem. Dzięki za odpowiedzi :)

Jeśli ktoś używa również serwera butelek Pythona, możesz postępować zgodnie z odpowiedzią podaną w tym poście, aby rozwiązać problem z CORS: Bottle Py: Włączanie CORS dla żądań jQuery AJAX

Mr_Pouet
źródło
10
Ponieważ znajdują się w różnych portach, nie są takie same!
około
Numery portów są różne. Może to naruszyć zasady Cross Origin.
4
Zauważ, że IE nie bierze pod uwagę numeru portu.
Ray Nicholus
@Niektóre Większość przeglądarek również stwierdza, że ​​nie są takie same, jeśli jedna ma „www”, a druga nie. Diabeł tkwi w szczegółach.
Rzadko „Where's Monica” Needy
@SeldomNeedy example.com, www.example.com, www1.example.com i mirror.www.example.com to różne domeny. example.com , example.com , example.com , example.com:80443 pochodzą z różnych źródeł.
około

Odpowiedzi:

122

Uznaje się, że jest taki sam tylko wtedy, gdy protokół , host i port są takie same: takie same zasady pochodzenia

Jeśli chcesz ją włączyć, musisz śledzić współdzielenie zasobów między źródłami (cors) , dodając nagłówki. Mozilla ma przykłady

Musisz dodać Access-Control-Allow-Origin jako nagłówek swojej odpowiedzi. Aby pozwolić wszystkim (prawdopodobnie NIE powinieneś tego robić):

Access-Control-Allow-Origin: *

Jeśli potrzebujesz obsługiwać wiele źródeł (na przykład oba example.comi www.example.com), ustaw Access-Control-Allow-Originw odpowiedzi wartość Originnagłówka -header z żądania (po sprawdzeniu, że źródło znajduje się na białej liście).

Zwróć również uwagę, że niektóre żądania wysyłają żądanie inspekcji wstępnej metodą OPTION, więc jeśli piszesz własny kod, musisz również obsłużyć te żądania. Przykłady można znaleźć w Mozilli .

trochę
źródło
8
Należy to podkreślić czerwonym kolorem, dużymi literami i pogrubioną czcionką wszędzie tam, gdzie zaangażowany jest AJAX.
Zoltán Schmidt
5
Jako dodatek do tej odpowiedzi należy zauważyć, że NIE'Access-Control-Allow-Origin: https://example.com' jest to równoważne z . Jeśli Twoja witryna jest dostępna za pośrednictwem obu z nich, w nagłówkach odpowiedzi powinny znajdować się oba. 'Access-Control-Allow-Origin: https://www.example.com'
Rzadko „Gdzie jest Monica” Needy
1
Należy pamiętać, że żaden inspekcji wstępnych wnioski wysyłane są domyślnie do prostych wniosków, jak GET, POSTi HEAD. Więcej informacji można znaleźć w artykule MDN, do którego link znajduje się w odpowiedzi .
Emile Bergeron
@SeldomNeedy nie możesz mieć zduplikowanych nagłówków
Mike Flynn
@MikeFlynn Moje sformułowanie było wprawdzie luźne, ale nie próbowałem tego sugerować; wystarczy skonfigurować serwer, aby wysyłał odpowiedni nagłówek na żądanie.
Rzadko `` Gdzie jest Monica '' Needy
31

Numery portów są różne.

Żądanie jest uznawane za międzydomenowe, jeśli którykolwiek ze schematów, nazwa hosta lub port nie są zgodne.

jcarpenter2
źródło
1
Z wyjątkiem 443 i 80.
Joseph Lust
15
w tym 443 i 80
code_monk
4
W jaki sposób potwierdzenie problemu może być rozwiązaniem problemu? Opublikuj odpowiedź stary.
Ritesh