Estou tentando fazer uma solicitação simples de origem cruzada e o Firefox a está bloqueando de forma consistente com este erro:
Solicitação de origem cruzada bloqueada: A política da mesma origem não permite a leitura do recurso remoto em [url]. Isso pode ser corrigido movendo o recurso para o mesmo domínio ou habilitando o CORS. [url]
Funciona bem no Chrome e Safari.
Pelo que eu posso dizer, configurei todos os cabeçalhos corretos no meu PHP para permitir que isso funcione. Aqui está o que meu servidor está respondendo
HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
Tentei usar Angular, jQuery e um objeto XMLHTTPRequest básico, assim:
var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
... e funciona em todos os navegadores, exceto no Firefox. Alguém pode ajudar com isso?
javascript
firefox
cors
cross-domain
Godwhacker
fonte
fonte
mozSystem
não é compatível com sites regulares, apenas aplicativos firefox-os empacotados , então, abandone essa opção.Accept application/json, text/plain, */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length 35
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host [url]
Origin [url]
Referer [referrer url]
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0
Error:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [url]. This can be fixed by moving the resource to the same domain or enabling CORS. [url]
Respostas:
Acontece que isso não tem nada a ver com CORS - era um problema com o certificado de segurança. Erros enganosos = 4 horas de dores de cabeça.
fonte
withCredentials=true
na instância XHR; caso contrário, o Firefox falhou ao usar o certificado do cliente ao fazer a solicitação (funcionou bem no Chrome, no entanto).Descobri que meu problema era que o servidor para o qual enviei a solicitação cruzada tinha um certificado que não era confiável.
Se você deseja se conectar a um domínio cruzado com
https
, primeiro deve adicionar uma exceção para este certificado.Você pode fazer isso visitando o link bloqueado uma vez e adicionando a exceção.
fonte
Eu me deparei com esta pergunta porque descobri que solicitações no Firefox estavam sendo bloqueadas com a mensagem:
Depois de arrancar meus cabelos, descobri que uma extensão recém-instalada do Firefox, Privacy Badger, estava bloqueando as solicitações.
Se você chegar a esta pergunta depois de coçar a cabeça, tente verificar quais extensões você instalou para ver se alguma delas está bloqueando solicitações.
Consulte Motivo: a solicitação CORS não foi bem - sucedida no MDN para obter detalhes.
fonte
Encontrei a solução após 2 dias :(.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
fonte
Se você não tiver um certificado 'real' (e, portanto, usando um autoassinado), no FireFox você pode ir para:
Lá, preencha a localização, por exemplo: https: //wwww.myserver: myport
fonte
Apenas uma palavra de advertência. Finalmente resolvi o problema com o Firefox e o CORS.
A solução para mim foi este post
Configurando CORS (compartilhamento de recursos de origem cruzada) no Apache com cabeçalhos de resposta corretos permitindo tudo | Benjamin Horn
No entanto, o Firefox estava se comportando muito, muito estranho depois de definir esses cabeçalhos no servidor Apache (na pasta .htaccess).
Eu adicionei um monte de
console.log("Hi FF, you are here A")
etc para ver o que estava acontecendo.No início, parecia que estava pendurado
xhr.send()
. Mas então descobri que não chegava a esta declaração. Coloquei outroconsole.log
logo antes dele e não cheguei lá - embora não houvesse nada entre o últimoconsole.log
e o novo. Apenas parou entre doisconsole.log
.Reordenando linhas, excluindo, para ver se havia algum caractere estranho no arquivo. Não encontrei nada.
Reiniciar o Firefox corrigiu o problema.
Sim, devo registrar um bug. É que é tão estranho que não sei como reproduzi-lo.
AVISO : E, oh, eu apenas fiz as
Header always set
partes, não asRewrite*
partes!fonte
Basta adicionar
ao
.htaccess
arquivo na raiz do site com o qual você está tentando se conectar.fonte
Para a posteridade, verifique também os logs do servidor para ver se o recurso solicitado está retornando 200.
Eu tive um problema semelhante, em que todos os cabeçalhos adequados estavam sendo retornados na solicitação pré-voo ajax, mas o navegador relatou que a solicitação real foi bloqueada devido a cabeçalhos CORS inválidos.
Acontece que a página solicitada estava retornando um erro 500 devido a um código incorreto, mas apenas quando foi buscada via CORS. O navegador (Chrome e Firefox) relatou erroneamente que o cabeçalho Access-Control-Allow-Origin estava faltando em vez de dizer que a página retornou 500.
fonte
Tente isso, deve resolver o seu problema
Em seu config.php, adicione www pre em seu domínio.com. Por exemplo:
Adicione isso ao seu arquivo .htaccess
fonte
Para mim, descobri que eu estava definindo o
Access-Control-Allow-Origin
cabeçalho da resposta como um específico (e correto),host.com
mas tinha que ser retornado comohttp://host.com
. O que o Firefox faz? Ele silenciosamente engole a solicitação GET e retorna um status 0 para o XHR, sem saída de avisos para o console javascript, enquanto para outras falhas semelhantes, pelo menos diria algo. Ai ai.fonte
Para depurar, verifique os logs do servidor, se possível. O Firefox retorna erros CORS no console por uma série de razões.
Uma das razões é também o plugin uMatrix (e eu acho que NoScript e similares também).
fonte
Enfrentei problema semelhante, e acho que é válido registrar como resolvi:
Eu tenho um sistema construído basicamente sobre Symfony 3. Para fins de autoaprendizagem e desempenho, decidi escrever alguns scripts usando GoLang, também, uma API com acesso público.
A API My Go espera parâmetros de formato Json e também retorna uma resposta de formato Json
Para chamar aqueles GoApi's que estou usando, na maioria, $ .ajax (jQuery) O primeiro teste foi um engano: o (des) famoso "Cross-Origin Request Blocked" apareceu! Então, tentei definir o "Access-Control-Allow-Origin: *" no apache conf, htaccess, php, javascript e em qualquer lugar que eu pudesse encontrar no google!
Mas, mesmo, mesmo erro frustrante !!!
A solução foi simples: tive que fazer solicitações de "POST" em vez de "GET".
Para conseguir isso, tive que ajustar GoLang e JavaScript para usar GET! Uma vez feito isso, não há mais solicitações de origem cruzada bloqueadas para mim !!!
Espero que ajude
PS:
Estou usando apache e Vhost, no bloco de diretório que tenho
Lembre-se: "*" significa que você aceitará solicitações de qualquer pessoa !!! (O que pode ser uma falta de segurança) No meu caso está tudo bem, porque será uma API pública
PS2: Meus cabeçalhos
Cabeçalhos de resposta
Solicitar cabeçalhos (469 B)
fonte
Se as respostas acima mencionadas não ajudarem, verifique se o servidor de back-end está funcionando ou não, pois no meu caso o servidor travou e esse erro acabou sendo totalmente enganoso.
fonte
No meu caso foi meu ADBLOCKER ! Por algum motivo, ele foi habilitado no meu host local e causando este erro no Firefox.
Desativá- lo ou desinstalar o plug - in deve corrigir isso.
No seu caso, pode não ser um adblocker, mas outro plugin do Firefox. Teste-o no modo anônimo primeiro, sem plug-ins para determinar se esse é o problema e, em seguida, desative os plug-ins sistematicamente até encontrar o culpado.
fonte
Os arquivos são autoexplicativos. Faça um arquivo, chame-o de qualquer coisa. No meu caso, jq2.php.
Agora vamos incluir um motor, criar um arquivo, chamá-lo do que quiser. No meu caso, é gs.php.
Tentei manter o exemplo o mais simples possível. E como ele executa o link a cada pressionamento de tecla, a cota de sua API será consumida muito rapidamente.
Claro que não há limites para as coisas que podemos fazer, como colocar os dados em uma tabela, enviar para o banco de dados e assim por diante.
fonte