JavaScript e CouchDB - Como evito erros de política de origem cruzada em solicitações GET / POST / PUT / DELETE

0

Estou postando esta pergunta no Stack Overflow também. Na minha opinião, esta questão sobrepõe os dois ...


Estou criando um um simples wrapper de JavaScript para a interface REST-Couch do CouchDB, mas estou preso a problemas de política de mesma origem.

Até agora tenho desenvolvido meu código para trabalhar localmente - e apenas como prova de conceito - no Mozilla FireFox. Meu servidor está rodando em localhost, porta 5984.

Para desabilitar a política de origem cruzada no Mozilla FireFox você pode usar o PrivilegeManager , mas ele só me pega na metade do caminho no sentido que eu não posso fazer pedidos PUT contra o meu servidor ...

/*
 * Including this in my JavaScript file only seems to disable cross-origin
 * policy checks for POST and GET requests in Mozilla FireFox.
 * PUT requests fail.
 */

netscape.security.PrivilegeManager.enablePrivilege(
    "UniversalBrowserRead UniversalBrowserWrite"
);



Existe alguma maneira que eu possa configurar meu servidor para ocultar sua localização para que eu não tenha que implementar soluções alternativas específicas do navegador para evitar problemas de política de mesma origem? Se não: quais soluções de navegação existem para desabilitar completamente a política de mesma origem?

    
por cllpse 07.09.2010 / 21:06

1 resposta

0

As mesmas políticas de origem (SOPs) foram desenvolvidas para impedir a injeção de informações de um contexto / domínio para outro. Eles são implementados e aplicados pelo navegador. Cada fornecedor pode ter seus próprios SOPs. Portanto, qualquer solução alternativa pode funcionar para um navegador enquanto ele falhará em outro.

IMHO a melhor (e única?) opção é usar algum tipo de proxy.

Se você estiver usando o Apache para hospedar seu webapp, poderá configurar facilmente um proxy reverso. Aceito solicitações e as envio para o serviço real (REST-API). A resposta será enviada de volta ao navegador. O SOP não será aplicado, já que o ponto de extremidade da API REST não estará em outro domínio (ou seja, outro servidor), mas no domínio de sua aplicação web (graças ao proxy).

[editar] Aqui está uma explicação melhor: link

    
por 07.09.2010 / 21:21

Tags