Eu me deparei com problemas do CORS várias vezes e geralmente posso corrigi-lo, mas quero realmente entender vendo isso de um paradigma de pilha do MEAN.
Antes, eu simplesmente adicionava o middleware no meu servidor expresso para capturar essas coisas, mas parece que há algum tipo de pré-gancho que está errando meus pedidos.
Campo de cabeçalho de solicitação Acesso-controle-permitir-cabeçalhos não é permitido por acesso-controle-permitir-cabeçalhos na resposta de comprovação
Eu assumi que eu poderia fazer isso:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","*")
})
ou o equivalente, mas isso não parece corrigi-lo. Eu também tentei
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","Access-Control-Allow-Headers")
})
Ainda sem sorte.
Access-Control-Request-Headers
header("Access-Control-Allow-Headers: Content-Type")
É isso que você precisa adicionar para fazer funcionar.
O navegador envia uma solicitação de comprovação (com o tipo de método OPTIONS) para verificar se o serviço hospedado no servidor pode ser acessado a partir do navegador em um domínio diferente. Em resposta à solicitação de preflight, se você injetar os cabeçalhos acima, o navegador entende que é possível fazer outras chamadas e receberei uma resposta válida à minha chamada GET / POST real. você pode restringir o domínio ao qual o acesso é concedido usando Access-Control-Allow-Origin "," localhost, xvz.com "em vez de *. (* concederá acesso a todos os domínios)
fonte
*
para...-Origin
etrue
para...-Credentials
. Ele não falhará para solicitações não credenciadas, mas também não funcionará para solicitações credenciadas. Veja o link que eu postei na minha resposta.response.setHeader("Access-Control-Allow-Headers", "*")
? Qual é a implicação de segurança de fazer isso?Esse problema resolvido com
Particular no meu projeto (express.js / nodejs)
Atualizar:
Sempre erro:
Access-Control-Allow-Headers is not allowed by itself in preflight response
erro, você pode ver o que há de errado com a ferramenta de desenvolvedor do chrome :está faltando o erro acima,
Content-Type
então adicioneContent-Type
aAccess-Control-Allow-Headers
fonte
A resposta aceita é boa, mas tive dificuldades para entendê-la. Então, aqui está um exemplo simples para esclarecê-lo.
Na minha solicitação ajax, eu tinha um cabeçalho de autorização padrão.
Este código produz o erro na pergunta. O que eu fiz no meu servidor nodejs foi adicionar a autorização nos cabeçalhos permitidos:
fonte
Para adicionar às outras respostas. Eu tive o mesmo problema e este é o código que usei no meu servidor expresso para permitir chamadas REST:
O que esse código basicamente faz é intercepta todos os pedidos e adiciona os cabeçalhos CORS, depois continua com minhas rotas normais. Quando há uma solicitação OPTIONS, ela responde apenas com os cabeçalhos do CORS.
EDIT: eu estava usando essa correção para dois servidores separados nodejs express na mesma máquina. No final, corrigi o problema com um servidor proxy simples.
fonte
Acabei de me deparar com esse problema, no contexto do ASP.NET, verifique se o seu Web.config fica assim:
Observe o valor de autorização para a
Access-Control-Allow-Headers
chave. Estava faltando o valor de autorização, essa configuração resolve meu problema.fonte
Muito bom eu usei isso em um projeto silex
fonte
No Chrome:
Para mim, esse erro foi acionado por um espaço à direita no URL desta chamada.
fonte
Apenas para adicionar que você também pode colocar esses cabeçalhos no arquivo de configuração do Webpack. Eu precisava deles no meu caso, como eu estava executando o servidor de desenvolvimento webpack.
fonte
res.setHeader ('Access-Control-Allow-Headers', '*');
fonte
Recebi o erro que o OP declarou usando Django, React e a lib django-cors-headers. Para corrigi-lo com essa pilha, faça o seguinte:
Em settings.py, adicione o abaixo conforme a documentação oficial .
fonte
esse problema ocorre quando criamos um cabeçalho personalizado para request.This solicitação que usa o
HTTP OPTIONS
e inclui vários cabeçalhos.O cabeçalho necessário para esta solicitação é
Access-Control-Request-Headers
, que deve fazer parte do cabeçalho de resposta e deve permitir solicitações de toda a origem. Às vezes, também precisaContent-Type
no cabeçalho da resposta. Portanto, seu cabeçalho de resposta deve ser assim -fonte
Na chamada Pós-API, estamos enviando dados no corpo da solicitação. Portanto, se enviarmos dados adicionando qualquer cabeçalho extra a uma chamada de API. Em seguida, a primeira chamada da OPTIONS API ocorrerá e a pós-chamada acontecerá. Portanto, você deve lidar com a chamada da OPTION API primeiro.
Você pode solucionar o problema escrevendo um filtro e, no interior, precisará verificar a chamada da API de chamada de opção e retornar um status 200 OK. Abaixo está o código de exemplo:
fonte
Se você estiver tentando adicionar um cabeçalho personalizado nos cabeçalhos de solicitação, informe ao servidor que esse cabeçalho específico pode ocorrer. O local para fazer isso é na classe que filtra os pedidos. No exemplo mostrado abaixo, o nome do cabeçalho personalizado é "type":
fonte
Depois de passar quase um dia, descobri que adicionar os dois códigos abaixo resolveu meu problema.
Adicione isso no Global.asax
e na configuração da web adicione o abaixo
fonte
Eu também enfrentei o mesmo problema no Angular 6. Resolvi o problema usando o código abaixo. Adicione o código no arquivo component.ts.
fonte
Esse mesmo problema que eu estava enfrentando.
Eu fiz uma mudança simples.
fonte
A mensagem é clara: 'Autorização' não é permitida na API. Definir
acesso-controle-permitir-cabeçalhos: "tipo de conteúdo, autorização"
fonte
Adicionando cors na função get É o que funcionou para mim
fonte