Errore CORS sullo stesso dominio?


87

In questo momento sto riscontrando uno strano problema CORS.

Ecco il messaggio di errore:

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

Due server:

  • localhost: 8666 / routeREST /: questo è un semplice server Python Bottle.
  • localhost: 8080 /: Python simpleHTTPserver dove eseguo l'applicazione Javascript. Questa app sta eseguendo richieste Ajax sul server sopra.

Qualche pensiero su quale potrebbe essere il problema?

MODIFICARE:

E ... il porto era il problema. Grazie per le tue risposte :)

Se qualcuno utilizza anche un bottle server Python, puoi seguire la risposta data in questo post per risolvere il problema CORS: Bottle Py: Abilitazione di CORS per le richieste jQuery AJAX


10
Dato che si trovano su porte diverse non sono uguali!
alcuni il

I numeri di porta sono diversi. Questo potrebbe violare le regole di Cross Origin.

4
Nota che IE non prende in considerazione il numero di porta.
Ray Nicholus

@some La maggior parte dei browser conclude anche che non sono la stessa cosa se uno ha un "www" e l'altro no. Il diavolo è nei dettagli.
Raramente "Dov'è Monica" il

@SeldomNeedy example.com, www.example.com, www1.example.com e mirror.www.example.com sono tutti domini diversi. example.com , example.com , example.com , example.com:80443 provengono tutti da origini diverse.
alcuni il

Risposte:


124

È considerato uguale solo se il protocollo , l' host e la porta sono gli stessi: Stessa politica di origine

Se vuoi abilitarlo devi seguire Cross-Origin Resource Sharing (cors) aggiungendo intestazioni. Mozilla ha degli esempi

Devi aggiungere Access-Control-Allow-Origin come intestazione nella tua risposta. Per consentire a tutti (probabilmente NON dovresti farlo):

Access-Control-Allow-Origin: *

Se devi supportare più origini (ad esempio sia example.come www.example.com), imposta Access-Control-Allow-Originnella tua risposta il valore Origindell'intestazione della richiesta (dopo aver verificato che l'origine sia nella white list).

Nota anche che alcune richieste inviano una richiesta di preflight, con un metodo OPTION, quindi se scrivi il tuo codice devi gestire anche quelle richieste. Vedi Mozilla per esempi .


8
Questo dovrebbe essere evidenziato con colore rosso, maiuscole e grassetto ovunque sia coinvolto AJAX.
Zoltán Schmidt

5
Come aggiunta a questa risposta, nota che NON'Access-Control-Allow-Origin: https://example.com' è equivalente a . Se il tuo sito è accessibile tramite entrambi, dovresti averli entrambi nelle intestazioni di risposta. 'Access-Control-Allow-Origin: https://www.example.com'
Raramente "Dov'è Monica" il

1
Nota che nessuna richiesta di verifica preliminare viene inviata per impostazione predefinita per richieste semplici come GET, POSTe HEAD. Vedere l' articolo MDN collegato nella risposta per ulteriori dettagli.
Emile Bergeron

@SeldomNeedy non puoi avere intestazioni duplicate
Mike Flynn

@MikeFlynn La mia formulazione era certamente un po 'allentata, ma non stavo cercando di suggerirlo; il server deve semplicemente essere configurato per inviare l'intestazione appropriata, in base alla richiesta.
Raramente "Dov'è Monica" ha bisogno del

30

I numeri di porta sono diversi.

Una richiesta è considerata interdominio se uno qualsiasi dello schema, del nome host o della porta non corrisponde.


1
Tranne 443 e 80.
Joseph Lust

17
inclusi 443 e 80
code_monk

5
Come può una conferma al problema essere la soluzione del problema? Pubblica la risposta amico.
Ritesh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.