Eu preciso permitir temporalmente XMLHttpRequest entre domínios. Alterar o cenário de segurança do Firefox parece ser o caminho a percorrer. Mas eu tentei com isso e isso, mas eles não funcionaram. Alguém já conseguiu configurar isso antes? Obrigado.
Para navegadores modernos, você pode tentar a seguinte abordagem:
https://developer.mozilla.org/en/HTTP_access_control
Em suma, você precisa adicionar o seguinte no header de resposta SERVER
(o seguinte permite access de foo.example
):
Access-Control-Allow-Origin: http://foo.example Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-PINGOTHER Access-Control-Max-Age: 1728000
Observe que o X-PINGOTHER
é o header personalizado que é inserido pelo JavaScript e deve diferir de site para site.
Se você quiser que qualquer site acesse seu servidor no Ajax, use *
.
Editar:
Quando eu respondi a pergunta pela primeira vez em 2009 , eu realmente atingi o mesmo problema, e eu trabalhei em torno dele usando a configuração do lado do servidor.
Não havia plug-in no FF ou no Chrome até então.
No entanto, agora temos alternativas usando o plugin do lado do navegador, por favor, verifique a resposta de tsds
Se você simplesmente não quer desperdiçar seu tempo em questões de domínio cruzado durante o desenvolvimento e teste do seu aplicativo, você pode usar o addon Force CORS for FF.
ATUALIZAÇÃO: Parece que esse addon não existe mais. Mas há outra opção: essa extensão do Chrome
Você já tentou usar o pedido ajax do jQuery? A partir da versão 1.3, o jQuery suporta certos tipos de solicitações ajax de domínio cruzado.
Citando a referência acima:
Nota: Todas as solicitações remotas (não no mesmo domínio) devem ser especificadas como GET quando ‘script’ ou ‘jsonp’ for o dataType (porque ele carrega o script usando uma tag de script DOM). Opções de Ajax que exigem um object XMLHttpRequest não estão disponíveis para essas solicitações. As funções completa e de sucesso são chamadas na conclusão, mas não recebem um object XHR; as funções beforeSend e dataFilter não são chamadas.
A partir do jQuery 1.2, você pode carregar dados JSON localizados em outro domínio se você especificar um retorno de chamada JSONP, que pode ser feito da seguinte forma: “myurl? Callback =?”. jQuery substitui automaticamente o? com o nome do método correto para chamar, chamando seu retorno de chamada especificado. Ou, se você definir o tipo de dados como “jsonp”, um retorno de chamada será adicionado automaticamente à sua solicitação do Ajax.
Aqui está a coisa, não há nenhuma maneira de “temporariamente” desativar XMLHttpRequest entre domínios, se você pode desativá-lo temporariamente, então ele pode ser desativado permanentemente. Esse é um problema bastante comum nos dias atuais da programação AJAX e é mais frequentemente resolvido usando a técnica conhecida como script entre domínios.
A idéia aqui é que, se você chamar um script de domínio cruzado, ele retornará resultados de JavaScript (JSON) que serão passados para uma function do seu lado.
Aqui está um exemplo de código para ilustrar como ele pode parecer de uma perspectiva de código JavaScript:
function request_some_data() { var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc"; try { try{ document.write(" "); } catch(e){ var x = document.createElement("script"); x.src = s; document.getElementsByTagName("head")[0].appendChild(x); } } catch (e) { alert(e.message); } }
Em seguida, você definirá uma function em seu código que recebe os dados e no servidor que “manipula” o caso de retorno de chamada, aqui está o JavaScript do lado do cliente:
function myfunc(data) { alert(data); }
E no lado do servidor, aqui estou dando um exemplo de PHP, mas isso pode ser feito com a mesma facilidade em Java ou qualquer que seja sua tecnologia de servidor:
Note que o que você está gerando no lado do servidor acaba sendo algum JavaScript que é executado no lado do cliente.
Eu tentei usar essa coisa ‘UniversalBrowswerRead’ também e não funcionou. Você pode adicionar um header “permitir”, mas ainda não tentei fazer isso. É bem novo.
Você pode encontrar mais informações aqui
Estou enfrentando isso do file://
. Gostaria de enviar consultas para dois servidores de um arquivo HTML local (um testbed).
Este caso em particular não deve ser uma preocupação de segurança, mas somente o Safari permite isso.
Aqui está a melhor discussão que encontrei sobre o problema.
Que tal usar algo como mod_proxy? Então, parece ao seu navegador que as solicitações estão indo para o mesmo servidor, mas elas estão realmente sendo encaminhadas para outro servidor.
Eu usei o Fiddler como proxy. O Fiddler redireciona as chamadas localhost para um servidor externo.
Eu configurei o Firefox para usar o proxy manual (porta 127.0.0.1 8888). O Fiddler captura as chamadas e as redireciona para outro servidor, usando filtros de URL.
Para permitir o domínio cruzado:
about:config
security.fileuri.strict_origin_policy
na barra de pesquisa Agora você pode fechar a guia. Normalmente, agora você pode fazer uma solicitação de domínio cruzado com essa configuração.
Veja aqui para mais detalhes.
Você pode conferir meu add on para o firefox. Permite cruzar o domínio na versão mais recente do firefox: https://addons.mozilla.org/pt-BR/firefox/addon/cross-domain-cors/
Editar manualmente as configurações do firefox é o caminho a percorrer, mas é inconveniente quando você precisa fazer isso com frequência.
Em vez disso, você pode instalar um complemento que fará isso com um clique.
Eu uso CORS everywhere
, o que funciona muito bem para mim.
Aqui está um link para o instalador