Meu site usa protocolo http e https; não afeta o conteúdo. Meu site usa chamadas jQuery ajax, que preenchem algumas áreas da página também.
Agora, eu gostaria de fazer todas as chamadas ajax por https. (por favor, não me pergunte por quê :)) Quando estou em uma página com protocolo https, as solicitações ajax estão funcionando. Quando estou em uma página com protocolo http, recebo um erro de javascript: Acesso ao URI restrito negado
Eu sei que este é um problema de domínio cruzado (na verdade, é um problema de protocolo cruzado) e sei que devo usar o mesmo protocolo em chamadas ajax como na página atual.
Ainda assim, quero que todas as chamadas ajax sejam https e chamá-las em uma página que foi servida por http. Existe alguma solução alternativa para conseguir isso (alguma solução json / proxy?), Ou é simplesmente impossível?
Respostas:
Adicione o cabeçalho Access-Control-Allow-Origin do servidor
http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
fonte
Experimente JSONP.
a maioria das bibliotecas JS torna isso tão fácil quanto outras chamadas AJAX, mas usa internamente um iframe para fazer a consulta.
se você não estiver usando JSON para sua carga útil, terá que rolar seu próprio mecanismo em torno do iframe.
pessoalmente, eu apenas redirecionaria da página http: // para a página https: //
fonte
https:
http://example.com/ pode resolver para um VirtualHost diferente de https://example.com/ (que, como o cabeçalho do Host não é enviado, responde ao padrão para aquele IP), então os dois são tratados separadamente domínios e, portanto, sujeito a restrições de crossdomain JS.
Os retornos de chamada JSON podem permitir que você evite isso.
fonte
Confira o projeto de código aberto do Forge. Ele fornece uma implementação JavaScript TLS, junto com algum Flash para lidar com as solicitações reais entre domínios:
http://github.com/digitalbazaar/forge/blob/master/README
Resumindo, o Forge permitirá que você faça XmlHttpRequests de uma página da web carregada em http para um site https. Você precisará fornecer um arquivo de política de domínio cruzado Flash por meio de seu servidor para habilitar as solicitações de domínio cruzado. Verifique as postagens do blog no final do README para obter uma explicação mais aprofundada sobre como funciona.
No entanto, devo mencionar que o Forge é mais adequado para solicitações entre dois domínios https diferentes. A razão é que existe um ataque MiTM potencial. Se você carregar o JavaScript e o Flash de um site não seguro, ele pode estar comprometido. O uso mais seguro é carregá-lo de um site seguro e depois usá-lo para acessar outros sites (seguros ou não).
fonte
Você pode tentar carregar a página https em um iframe e rotear todas as solicitações ajax dentro / fora do quadro por meio de alguma ponte, é um hackaround, mas pode funcionar (não tenho certeza se vai impor as mesmas restrições de acesso dado o contexto seguro) . Caso contrário, um proxy http local para redirecionar solicitações (como qualquer chamada entre domínios) seria a solução aceita.
fonte
Aqui está o que eu faço:
Gere um iframe oculto com os dados que você gostaria de postar. Como você ainda controla esse iframe, a mesma origem não se aplica. Em seguida, envie o formulário nesse iFrame para a página SSL. A página SSL então redireciona para uma página não SSL com mensagens de status. Você tem acesso ao iFrame.
fonte