XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Li sobre solicitações de ajax entre domínios e entendi o problema de segurança subjacente. No meu caso, 2 servidores estão sendo executados localmente e gostam de ativar solicitações entre domínios durante o teste.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Estou emitindo uma solicitação ajax para localhost:8080 - GAE server
enquanto minha página é carregada do servidor de nós. Qual é o mais fácil e seguro (não deseja iniciar o Chrome com a disable-web-security
opção). Se eu precisar alterar 'Content-Type'
, devo fazê-lo no servidor do nó? Quão?
Respostas:
Como eles estão sendo executados em portas diferentes, eles são diferentes em JavaScript
origin
. Não importa se eles estão na mesma máquina / nome do host.Você precisa ativar o CORS no servidor (localhost: 8080). Confira este site: http://enable-cors.org/
Tudo o que você precisa fazer é adicionar um cabeçalho HTTP ao servidor:
Ou, para simplificar:
Não use "*" se o seu servidor estiver tentando definir um cookie e você usar
withCredentials = true
Você pode ler mais sobre
withCredentials
aquifonte
Access-Control-Allow-Origin
cabeçalho fornecido precisa ser um cabeçalho adicionado às respostas HTTP que o servidor envia. Esse cabeçalho precisa fazer parte da resposta do servidor, não precisa fazer parte da solicitação do cliente . Especificamente, o que acontece é antes que o cliente faça a solicitação real desejada, o navegador envia umaOPTIONS
solicitação antes e, se a resposta do servidor a essaOPTIONS
solicitação não contiver o cabeçalho, o navegador não enviará a solicitação desejada.Se você precisar de uma solução rápida no Chrome para solicitações de ajax, esse plug-in do Chrome permitirá automaticamente acessar qualquer site de qualquer origem, adicionando o cabeçalho de resposta adequado
Extensão do Chrome Allow-Control-Allow-Origin: *
fonte
Você precisa habilitar o CORS para resolver isso
se seu aplicativo for criado com o node.js simples
defini-lo em seus cabeçalhos de resposta como
se seu aplicativo for criado com estrutura expressa
use um middleware CORS como
e aplicar via
Aqui estão dois links de referência
fonte
config.allowedDomains
. diga no meu caso que uri devo colocar lá?*
ouspecific domain
deseja acessar.app.configure()
não é um erro de função?Aceito a resposta do @Rocket hazmat, pois me leva à solução. De fato, estava no servidor GAE que eu precisava definir o cabeçalho. Eu tive que definir isso
configuração
"Access-Control-Allow-Origin"
deu apenas erroAlém disso, se o token de autenticação precisar ser enviado, adicione-o também
Além disso, no cliente, defina
withCredentials
isso faz com que 2 solicitações sejam enviadas ao servidor, uma com
OPTIONS
. O cookie de autenticação não é enviado com ele, portanto, é necessário tratar a autenticação externa.fonte
No router.js, basta adicionar código antes de chamar os métodos get / post. Funciona para mim sem erros.
fonte
Eu estava enfrentando um problema ao chamar recurso de origem cruzada usando ajax do chrome.
Eu usei o nó js e o servidor http local para implantar meu aplicativo js do nó.
Eu estava recebendo resposta de erro ao acessar o recurso de origem cruzada
Eu encontrei uma solução nisso,
1) Adicionei o código abaixo ao meu arquivo app.js
2) Na minha página html chamada recurso de origem cruzada usando
$.getJSON();
fonte
Se você estiver usando express, poderá usar o cors middleware da seguinte maneira:
fonte
Adicione isso ao servidor NodeJS abaixo das importações:
fonte
Se você obteve 403 depois disso, reduza os filtros na configuração do tomcat WEB.XML para o seguinte:
fonte
Finalmente consegui a resposta para o apache Tomcat8
Você precisa editar o arquivo tomcat web.xml.
provavelmente estará dentro da pasta webapps,
encontre e edite
Isso permitirá que Access-Control-Allow-Origin todos os hosts. Se você precisar alterá-lo de todos os hosts para apenas seu host, poderá editar o
acima do código * para o seu http: // your_public_IP ou http://www.example.com
você pode consultar aqui a documentação do filtro Tomcat
obrigado
fonte
Oi Esta é a maneira de resolver o problema do CORS no nó Basta adicionar essas linhas no lado "api" do servidor no Node.js (ou qualquer que seja o arquivo do servidor), antes de instalar o "cors"
fonte
use dataType: 'jsonp', funciona para mim.
fonte
Para PHP, use isso para definir cabeçalhos.
fonte
adicione isso às suas rotas para as quais você está chamando no front-end. Por exemplo, se você chamar http: // localhost: 3000 / users / register, deverá adicionar este fragmento de código ao arquivo .js de back-end que esta rota estabelece.
fonte
Caso alguém procure a solução, se você estiver usando express aqui, é a solução rápida.
1) instale cors usando o npm
npm install cors --save
2) importá-lo [requerer]
const cors = require('cors')
3) use-o como middleware
app.use(cors())
para mais detalhes e uso de cors . É isso, espero que funcione.
fonte
Se você estiver no Google Chrome, tente instalar este complemento:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related
fonte