Mi sitio utiliza el protocolo http y https; no afecta el contenido. Mi sitio usa llamadas jQuery ajax, que también llena algunas áreas de la página.
Ahora, me gustaría hacer todas las llamadas ajax a través de https. (por favor, no me pregunte por qué :)) Cuando estoy en una página con protocolo https, las solicitudes ajax funcionan. Cuando estoy en una página con protocolo http, aparece un error de javascript: acceso a URI restringido denegado
Sé que este es un problema de dominio cruzado (de hecho, es un problema de protocolo cruzado), y sé que debería usar el mismo protocolo en las llamadas ajax que en la página actual.
Aún así, quiero que todas las llamadas ajax sean https y las llame en una página que se sirvió a través de http. ¿Hay alguna solución para lograr esto (¿alguna solución json / proxy?), ¿O es simplemente imposible?
Respuestas:
Agregue el encabezado Access-Control-Allow-Origin desde el servidor
http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
fuente
Prueba JSONP.
la mayoría de las bibliotecas JS lo hacen tan fácil como otras llamadas AJAX, pero utilizan internamente un iframe para realizar la consulta.
si no está utilizando JSON para su carga útil, tendrá que poner su propio mecanismo alrededor del iframe.
personalmente, simplemente redirigiría de la página http: // a la https: //
fuente
https:
http://example.com/ puede resolverse en un VirtualHost diferente a https://example.com/ (que, como el encabezado del Host no se envía, responde al valor predeterminado para esa IP), por lo que los dos se tratan como separados dominios y, por lo tanto, sujetos a restricciones JS de dominios cruzados.
Las devoluciones de llamada JSON pueden permitirle evitar esto.
fuente
Echa un vistazo al proyecto Forge de código abierto. Proporciona una implementación TLS de JavaScript, junto con algo de Flash para manejar las solicitudes reales entre dominios:
http://github.com/digitalbazaar/forge/blob/master/README
En resumen, Forge le permitirá realizar XmlHttpRequests desde una página web cargada a través de http a un sitio https. Deberá proporcionar un archivo de política Flash entre dominios a través de su servidor para habilitar las solicitudes entre dominios. Consulte las publicaciones del blog al final del README para obtener una explicación más detallada de cómo funciona.
Sin embargo, debo mencionar que Forge es más adecuado para solicitudes entre dos dominios https diferentes. La razón es que existe un posible ataque MiTM. Si carga JavaScript y Flash desde un sitio no seguro, podría verse comprometido. El uso más seguro es cargarlo desde un sitio seguro y luego usarlo para acceder a otros sitios (seguros o no).
fuente
Puede intentar cargar la página https en un iframe y enrutar todas las solicitudes de ajax dentro / fuera del marco a través de algún puente, es un truco pero podría funcionar (no estoy seguro si impondrá las mismas restricciones de acceso dado el contexto seguro) . De lo contrario, la solución aceptada sería un proxy http local para redireccionar las solicitudes (como cualquier llamada entre dominios).
fuente
Esto es lo que hago:
Genere un iFrame oculto con los datos que le gustaría publicar. Dado que todavía controlas ese iFrame, no se aplica el mismo origen. Luego envíe el formulario en ese iFrame a la página ssl. La página ssl luego redirige a una página que no es ssl con mensajes de estado. Tienes acceso al iFrame.
fuente