Estou tentando enviar arquivos para o meu servidor com uma solicitação de postagem, mas quando ele envia causa o erro:
O campo de cabeçalho da solicitação Content-Type não é permitido pelo Access-Control-Allow-Headers.
Então pesquisei o erro no Google e adicionei os cabeçalhos:
$http.post($rootScope.URL, {params: arguments}, {headers: {
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}
Então eu recebo o erro:
O campo de cabeçalho da solicitação Access-Control-Allow-Origin não é permitido pelos Access-Control-Allow-Headers
Então, pesquisei isso no Google e a única pergunta semelhante que pude encontrar foi fornecida meia resposta e encerrada como fora de tópico. Quais cabeçalhos devo adicionar / remover?
Respostas:
O servidor (para o qual a solicitação POST é enviada) precisa incluir o
Access-Control-Allow-Headers
cabeçalho (etc) em sua resposta . Colocá-los em sua solicitação do cliente não tem efeito.Isso ocorre porque cabe ao servidor especificar que aceita solicitações de origem cruzada (e que permite o
Content-Type
cabeçalho da solicitação, etc.) - o cliente não pode decidir por si mesmo que um determinado servidor deve permitir o CORS.fonte
Content-Type
?Eu tive o mesmo problema. Na documentação do jQuery, encontrei:
Portanto, embora o servidor permita solicitações de origem cruzada, mas não permita
Access-Control-Allow-Headers
, lançará erros. Por padrão, o tipo de conteúdo angular éapplication/json
, que está tentando enviar uma solicitação OPTION. Tente substituir o cabeçalho padrão angular ou permitirAccess-Control-Allow-Headers
no final do servidor. Aqui está uma amostra angular:fonte
or allow Access-Control-Allow-Headers in server end
como?header
para conjunto de cabeçalho da respostaSe isso ajudar alguém, (mesmo que seja um pouco ruim, pois devemos apenas permitir isso para fins de desenvolvedor), aqui está uma solução Java, pois encontrei o mesmo problema. [Editar] Não use o curinga *, pois é uma péssima solução, use
localhost
se você realmente precisar de algo trabalhando localmente.fonte
O servidor (para o qual a solicitação POST é enviada) precisa incluir o cabeçalho Content-Type em sua resposta.
Aqui está uma lista de cabeçalhos típicos a serem incluídos, incluindo um cabeçalho "X_ACCESS_TOKEN" personalizado:
É para isso que o pessoal do servidor http precisa configurar para o servidor da Web para o qual você está enviando suas solicitações.
Você também pode solicitar ao seu servidor que exponha o cabeçalho "Comprimento do conteúdo".
Ele reconhecerá isso como uma solicitação de compartilhamento de recursos de origem cruzada (CORS) e deve entender as implicações de fazer essas configurações de servidor.
Para detalhes, consulte:
fonte
Você pode ativar o cabeçalho apropriado no PHP com isso:
fonte
O seguinte funciona para mim com o nodejs:
fonte
Os cabeçalhos que você está tentando definir são cabeçalhos de resposta . Eles devem ser fornecidos, na resposta, pelo servidor para o qual você está fazendo a solicitação.
Eles não têm lugar definido no cliente. Seria inútil ter um meio de conceder permissões se elas pudessem ser concedidas pelo site que desejava permissão em vez do site que possuía os dados.
fonte
Se alguém tiver esse problema com um servidor expresso, adicione o seguinte middleware
fonte
se você estiver testando algumas solicitações javascript para ionic2 ou angularjs 2, no chrome no pc ou mac, certifique-se de instalar o plugin CORS no navegador chrome para permitir a origem cruzada.
O mayba get request funcionará sem a necessidade disso, mas postar e colocar e excluir precisará instalar o plugin cors para testes sem problemas, isso definitivamente não é legal, mas eu não sei como as pessoas fazem isso sem o plugin CORS.
e também verifique se a resposta json não está retornando 400 por algum status json
fonte
este é um problema de back-end. se usar velas api no backend mudar cors.js e adicione seu arquivado aqui
fonte
No Asp Net Core , para fazê-lo funcionar rapidamente para o desenvolvimento; em
Startup.cs
,Configure method
addfonte
No meu caso, estou recebendo vários parâmetros como @HeaderParam em um método de serviço da web.
Esses parâmetros DEVEM ser declarados no seu filtro CORS dessa maneira:
fonte
Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers
error significa que oAccess-Control-Allow-Origin
campo do cabeçalho HTTP não é tratado ou permitido por resposta. Remova oAccess-Control-Allow-Origin
campo do cabeçalho da solicitação.fonte
Se você estiver usando um
localhost
PHP configurado para resolver o problema:No seu uso front-end:
e boom sem mais problemas
localhost
!fonte