Estou usando .htaccess para reescrever URLs e usei a tag base html para fazê-lo funcionar.
Agora, quando tento fazer uma solicitação ajax, recebo o seguinte erro:
XMLHttpRequest não pode carregar
http://www.example.com/login.php
. Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado.http://example.com
Portanto, a origem ' ' não é permitida.
javascript
jquery
ajax
cors
xmlhttprequest
Th3lmuu90
fonte
fonte
http://wordicious.com
é um domínio diferente do quehttp://www.wordicious.com/
, portanto, o erro. Btw, se está funcionando agora e voltou por si só, você provavelmente deve excluir a pergunta.Respostas:
Use
addHeader
Em vez de usar osetHeader
método,*
na linha acima permitiráaccess to all domains
.Por permitir
access to specific domain only
:Verifique isso
blog post
.fonte
Por que o erro foi gerado:
O código JavaScript é limitado pela política de mesma origem , ou seja, a partir de uma página em
www.example.com
, você só pode fazer solicitações (AJAX) para serviços localizados exatamente no mesmo domínio, nesse caso, exatamentewww.example.com
( nãoexample.com
- sem owww
- ouwhatever.example.com
).No seu caso, seu código Ajax está tentando acessar um serviço a
http://wordicious.com
partir de uma página localizada emhttp://www.wordicious.com
.Embora muito parecidos, eles não são do mesmo domínio. E quando eles não estiverem no mesmo domínio, a solicitação só será bem-sucedida se a resolução do destino contiver um
Access-Control-Allow-Origin
cabeçalho.Como sua página / serviço em
http://wordicious.com
nunca foi configurada para apresentar esse cabeçalho, essa mensagem de erro é mostrada.Solução:
Como dito, os domínios de origem (onde a página com JavaScript está) e o destino (onde o JavaScript está tentando alcançar) devem ser exatamente os mesmos.
Seu caso parece um erro de digitação. Parece
http://wordicious.com
ehttp://www.wordicious.com
é realmente o mesmo servidor / domínio. Portanto, para corrigir, digite o destino e a origem igualmente: faça com que você solicite páginas / serviços de código Ajax parahttp://www.wordicious.com
nãohttp://wordicious.com
. (Talvez coloque o URL de destino relativamente, tipo'/login.php'
, sem o domínio).Em uma nota mais geral:
Se o problema não for um erro de digitação, como parece ser o desta pergunta, a solução seria adicionar o
Access-Control-Allow-Origin
domínio de destino . Para adicioná-lo, depende, é claro, do servidor / idioma por trás desse endereço. Às vezes, uma variável de configuração na ferramenta faz o truque. Outras vezes, você precisará adicionar os cabeçalhos através do código.fonte
Para o servidor .NET, você pode configurar isso em web.config, como mostrado abaixo
Por exemplo, digamos que, se o domínio do servidor for http://live.makemypublication.com e o cliente for http://www.makemypublication.com , configure no web.config do servidor como abaixo
fonte
Se você receber esta mensagem de erro do navegador:
quando você estiver tentando fazer uma solicitação Ajax POST / GET para um servidor remoto que esteja fora de seu controle, esqueça esta simples correção:
O que você realmente precisa fazer, especialmente se você usa JavaScript apenas para fazer a solicitação do Ajax, é um proxy interno que pega sua consulta e a envia para o servidor remoto.
Primeiro no seu JavaScript, faça uma chamada do Ajax para o seu próprio servidor, algo como:
Em seguida, crie um arquivo PHP simples chamado proxy.php para agrupar seus dados do POST e anexá-los ao servidor de URL remoto como parâmetro. Dou um exemplo de como ignoro esse problema com a API de pesquisa do hotel Expedia:
Fazendo:
Você está apenas fazendo a mesma consulta, mas no lado do servidor e depois disso, deve funcionar bem.
fonte
Você precisa adicionar isso no início da sua página php "login.php"
fonte
você deve colocar as chaves / valores dos cabeçalhos na resposta do método de opções. por exemplo, se você tiver recurso em http://mydomain.com/myresource , no código do servidor você escreve
fonte
Altere basicamente a resposta do cabeçalho da API adicionando os seguintes parâmetros adicionais.
Access-Control-Allow-Credentials: true
Controle de Acesso - Permitir Origem: *
Mas essa não é uma boa solução quando se trata de segurança
fonte
A solução alternativa é usar um proxy reverso em execução no host 'de origem' e encaminhar para o servidor de destino, como o Fiddler:
Link aqui: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy
Ou um proxy reverso do Apache ...
fonte
Adicione isso ao seu arquivo PHP ou controlador principal
fonte
header("Access-Control-Allow-Credentials: true");
Resolvido com a entrada abaixo no httpd.conf
fonte
Os candidatos encontram a Função usada em XMLHTTPREQUEST em Javascript para configurar os cabeçalhos da solicitação.
Referência: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader
fonte