Erro CORS no mesmo domínio?

87

Estou tendo um problema de CORS estranho agora.

Esta é a mensagem de erro:

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

Dois servidores:

  • localhost: 8666 / routeREST /: este é um servidor Python Bottle simples.
  • localhost: 8080 /: Python simpleHTTPserver onde executo um aplicativo Javascript. Este aplicativo está executando solicitações Ajax no servidor acima.

Alguma ideia sobre qual poderia ser o problema?

EDITAR:

E ... o porto era o problema. Obrigado por suas respostas :)

Se alguém também estiver usando um servidor de garrafa Python, você pode seguir a resposta dada neste post para resolver o problema do CORS: Bottle Py: Habilitando CORS para solicitações jQuery AJAX

Mr_Pouet
fonte
10
Uma vez que estão em portas diferentes, não são iguais!
cerca de
Os números das portas são diferentes. Isso pode violar as regras de origem cruzada.
4
Observe que o IE não leva em consideração o número da porta.
Ray Nicholus
@alguns A maioria dos navegadores também conclui que eles não são iguais se um tiver um 'www' e o outro não. O diabo está nos detalhes.
Raramente 'Where's Monica' Needy
@SeldomNeedy example.com, www.example.com, www1.example.com e mirror.www.example.com são todos domínios diferentes. example.com , example.com , example.com , example.com:80443 são todos de origens diferentes.
cerca de

Respostas:

124

Só é considerado o mesmo se o protocolo , host e porta forem os mesmos: Política da Mesma Origem

Se você deseja habilitá-lo, siga o Compartilhamento de recursos de origem cruzada (cors) adicionando cabeçalhos. Mozilla tem exemplos

Você precisa adicionar Access-Control-Allow-Origin como um cabeçalho em sua resposta. Para permitir a todos (você provavelmente NÃO deve fazer isso):

Access-Control-Allow-Origin: *

Se você precisar oferecer suporte a origens múltiplas (por exemplo example.come www.example.com), defina Access-Control-Allow-Originem sua resposta o valor do Origin-header da solicitação (depois de verificar se a origem está na lista branca).

Observe também que algumas solicitações enviam uma solicitação de comprovação, com um método OPTION, portanto, se você escrever seu próprio código, deverá lidar com essas solicitações também. Veja Mozilla para exemplos .

alguns
fonte
8
Isso deve ser destacado com cor vermelha, maiúsculas e negrito em todos os lugares onde AJAX estiver envolvido.
Zoltán Schmidt de
5
Como um adendo a esta resposta, observe que NÃO'Access-Control-Allow-Origin: https://example.com' é equivalente a . Se o seu site for acessível por meio de ambos, você deve ter os dois em seus cabeçalhos de resposta. 'Access-Control-Allow-Origin: https://www.example.com'
Raramente 'Where's Monica' Needy
1
Observe que nenhuma solicitação de comprovação é enviada por padrão para solicitações simples como GET, POSTe HEAD. Consulte o artigo MDN com link na resposta para obter detalhes adicionais.
Emile Bergeron
@SeldomNeedy, você não pode ter cabeçalhos duplicados
Mike Flynn
@MikeFlynn Minhas palavras estavam um pouco soltas, mas eu não estava tentando sugerir isso; o servidor simplesmente precisa ser configurado para enviar o cabeçalho apropriado, de acordo com a solicitação.
Raramente 'Cadê a Monica' Carente
30

Os números das portas são diferentes.

Uma solicitação é considerada entre domínios se algum esquema, nome do host ou porta não corresponder.

jcarpenter2
fonte
1
Exceto 443 e 80.
Joseph Lust
17
incluindo 443 e 80
code_monk
5
Como uma confirmação do problema pode ser a solução do problema? Publique a resposta cara.
Ritesh