Estou recebendo este erro usando o ngResource para chamar uma API REST no Amazon Web Services:
XMLHttpRequest não pode carregar http://server.apiurl.com:8000/s/login?login=facebook . A resposta à solicitação de comprovação não passa na verificação do controle de acesso: Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado. Portanto, a origem ' http: // localhost ' não é permitida. Erro 405
Serviço:
socialMarkt.factory('loginService', ['$resource', function($resource){
var apiAddress = "http://server.apiurl.com:8000/s/login/";
return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
getUser: {method:'POST'}
});
}]);
Controlador:
[...]
loginService.getUser(JSON.stringify(fbObj)),
function(data){
console.log(data);
},
function(result) {
console.error('Error', result.status);
}
[...]
Estou usando o Chrome e não sei mais o que fazer para corrigir esse problema. Eu até configurei o servidor para aceitar cabeçalhos de origem localhost
.
javascript
ajax
http
cors
http-status-code-405
Andre Mendes
fonte
fonte
Respostas:
Você está tendo problemas com o CORS.
Existem várias maneiras de corrigir / solucionar isso.
Mais detalhadamente, você está tentando acessar api.serverurl.com a partir do localhost. Esta é a definição exata de solicitação entre domínios.
Ao desativá-lo apenas para concluir seu trabalho (OK, coloque pouca segurança para você se você visitar outros sites e apenas abrir a lata no caminho), você pode usar um proxy que faz o navegador pensar que todas as solicitações vêm do host local quando realmente você tem um servidor local que chama o servidor remoto.
portanto, api.serverurl.com pode se tornar localhost: 8000 / api e seu nginx local ou outro proxy será enviado para o destino correto.
Agora, por demanda popular, 100% mais informações sobre o CORS .... o mesmo bom gosto!
E para os que recusam ... ignorar o CORS é exatamente o que é mostrado para aqueles que simplesmente aprendem o front-end. https://codecraft.tv/courses/angular/http/http-with-promises/
fonte
Meu "API Server" é um aplicativo PHP. Para solucionar esse problema, encontrei a solução abaixo para funcionar:
Coloque as linhas em index.php
fonte
Access-Control-Allow-Headers
.Na API da web do AspNetCore, esse problema foi corrigido adicionando "Microsoft.AspNetCore.Cors" (versão 1.1.1) e adicionando as alterações abaixo no Startup.cs.
e
e colocando
[EnableCors("AllowAllHeaders")]
o controlador.fonte
Existem algumas advertências quando se trata de CORS. Primeiro, ele não permite curingas
*
mas não me prenda a isso. Eu li em algum lugar e não consigo encontrar o artigo agora.Se você estiver solicitando um domínio diferente, precisará adicionar os cabeçalhos de origem permitida.
Se você está fazendo solicitações que afetam os recursos do servidor, como POST / PUT / PATCH, e se o tipo MIME é diferente do seguinte
application/x-www-form-urlencoded
,multipart/form-data
outext/plain
o navegador irá automaticamente fazer uma pre-flight OPÇÕES solicitar para verificar com o servidor se ele permitiria .Portanto, sua API / servidor precisa lidar com essas solicitações OPTIONS de acordo. Você precisa responder com o
access control headers
código de status de resposta HTTP apropriado e deve ser200
.Os cabeçalhos devem ser algo assim, ajuste-os de acordo com suas necessidades:
O cabeçalho de idade máxima é importante, no meu caso, não funcionaria sem ele, acho que o navegador precisa das informações por quanto tempo os "direitos de acesso" são válidos.
Além disso, se você estiver fazendo, por exemplo, uma
POST
solicitação comapplication/json
mime de um domínio diferente, também precisará adicionar o cabeçalho de origem de permissão mencionado anteriormente, para que fique assim:Quando o pré-vôo for bem-sucedido e obtiver todas as informações necessárias, sua solicitação real será feita.
De um modo geral, quaisquer
Access-Control
cabeçalhos solicitados na solicitação inicial ou pré-vôo devem ser fornecidos na resposta para que funcione.Há um bom exemplo nos documentos MDN aqui neste link , e você também deve verificar esta postagem do SO
fonte
.AllowCredentials()
. Depois de adicionar.AllowCredentials()
tudo funcionou.Fonte: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Você deve enviar o cabeçalho HTTP de Controle de Acesso-Permissão-Origem: * do lado do servidor.
Se você estiver usando o Apache como seu servidor HTTP, poderá adicioná-lo ao seu arquivo de configuração do Apache assim:
Mod_headers é ativado por padrão no Apache, no entanto, convém garantir que ele seja ativado executando:
fonte
/etc/apache2/apache2.conf
Se você está escrevendo uma extensão chrome
Você precisa adicionar
manifest.json
as permissões para seu (s) domínio (s).fonte
Se você estiver usando o servidor IIS por acaso. Você pode definir os cabeçalhos abaixo na opção Cabeçalhos de solicitação HTTP.
com tudo isso, receba etc., funcionará bem.
fonte
Para servidor de balão python, você pode usar o plug-in flask-cors para ativar solicitações de domínio cruzado.
Veja: https://flask-cors.readthedocs.io/en/latest/
fonte
No PHP você pode adicionar os cabeçalhos:
fonte
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
Para corrigir problemas de solicitações de origem cruzada em um aplicativo Node JS:
E basta adicionar as linhas abaixo ao
app.js
fonte
No meu arquivo de configuração do Apache VirtualHost, adicionei as seguintes linhas:
fonte
Para aqueles que estão usando o Lambda Integrated Proxy com API Gateway . Você precisa configurar sua função lambda como se estivesse enviando suas solicitações diretamente, o que significa que a função deve configurar os cabeçalhos de resposta corretamente. (Se você estiver usando funções lambda personalizadas, isso será tratado pelo API Gateway.)
fonte
Eu acho que desabilitar o CORS do Chrome não é uma boa maneira , porque se você o estiver usando no iônico, certamente no Mobile Build a questão aumentará novamente.
Tão melhor para corrigir em seu back-end.
Antes de tudo No cabeçalho, você precisa definir
E se a API estiver se comportando como GET e POST, ambos também serão definidos no cabeçalho -
fonte
Uma causa muito comum desse erro pode ser que a API do host tenha mapeado a solicitação para um método http (por exemplo, PUT) e o cliente da API esteja chamando a API usando um método http diferente (por exemplo, POST ou GET)
fonte
PUT
métodoNossa equipe ocasionalmente vê isso usando Vue, axios e um C # WebApi. Adicionar um atributo de rota no terminal que você está tentando acessar o corrige.
fonte
Eu enfrentei esse problema quando o servidor DNS foi definido como 8.8.8.8 (google). Na verdade, o problema estava no roteador, meu aplicativo tentou se conectar ao servidor pelo google, não localmente (no meu caso particular). Eu removi o 8.8.8.8 e isso resolveu o problema. Sei que esses problemas foram resolvidos pelas configurações do CORS, mas talvez alguém tenha o mesmo problema que eu
fonte
Estou usando o AWS sdk para uploads, depois de passar algum tempo pesquisando on-line, me deparei com esse tópico. Graças a @lsimoneau 45581857 , acontece exatamente o mesmo que estava acontecendo. Simplesmente apontei meu URL de solicitação para a região no meu bucket anexando a opção region e funcionou.
fonte
As distribuições independentes do GeoServer incluem o servidor de aplicativos Jetty. Ative o compartilhamento de recursos de origem cruzada (CORS) para permitir que aplicativos JavaScript fora do seu domínio usem o GeoServer.
Remova o comentário do seguinte
<filter>
e<filter-mapping>
de webapps / geoserver / WEB-INF / web.xml:fonte
É fácil resolver esse problema com apenas algumas etapas, sem se preocupar com nada. Por favor, siga os passos para resolvê-lo.
fonte
Algo que é muito fácil de perder ...
No Solution Explorer, clique com o botão direito do mouse em api-project. Na janela de propriedades, defina 'Autenticação Anônima' como Ativado !!!
fonte
Desabilite a segurança do Chrome. Crie um atalho do Chrome com o botão direito do mouse -> propriedades -> destino, cole este "C: \ Arquivos de Programas (x86) \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user -data-dir = "c: / chromedev"
fonte