Ajax usando https en una página http

Mi sitio usa el protocolo http y https; no afecta el contenido. Mi sitio utiliza jQuery ajax calls, 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 preguntes por qué :)) Cuando estoy en una página con protocolo https, las solicitudes de ajax están funcionando. Cuando estoy en una página con el protocolo http, obtengo 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 llamadas ajax que en la página actual.

Aún así, quiero que todas las llamadas ajax sean https, y las llamo en una página que fue servida a través de http. ¿Hay alguna solución para lograr esto (alguna solución json / proxy?), ¿O simplemente es imposible?

Agregue el encabezado Access-Control-Allow-Origin del servidor

Access-Control-Allow-Origin: https://www.mysite.com 

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

Prueba JSONP.

la mayoría de las bibliotecas JS lo hacen tan fácil como otras llamadas AJAX, pero internamente usan un iframe para hacer la consulta.

si no está utilizando JSON para su carga útil, entonces tendrá que implementar su propio mecanismo alrededor del iframe.

personalmente, me gustaría redirigir desde la página http: // al https: // one

http://example.com/ puede resolverse en un VirtualHost diferente de 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, sujeto a restricciones de dominio cruzado JS.

Las devoluciones de llamada JSON pueden permitirle evitar esto.

Mira el proyecto Forge de opensource. Proporciona una implementación JavaScript TLS, junto con algo de Flash para manejar las solicitudes de dominios cruzados reales:

http://github.com/digitalbazaar/forge/blob/master/README

En resumen, Forge le permitirá hacer XmlHttpRequests desde una página web cargada sobre http a un sitio https. Tendrá que proporcionar un archivo de política de Flash entre dominios a través de su servidor para habilitar las solicitudes entre dominios. Consulte las publicaciones del blog al final de 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 hay 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 (seguro o no).

Podría intentar cargar la página https en un iframe y enrutar todas las solicitudes ajax dentro / fuera del marco a través de algún bridge, es un hackaround pero podría funcionar (no estoy seguro si impondrá las mismas restricciones de acceso dado el contexto seguro) . De lo contrario, un proxy http local para redirigir las solicitudes (como cualquier llamada de dominio cruzado) sería la solución aceptada.

Esto es lo que hago:

Genere un iFrame oculto con los datos que desea publicar. Como todavía controlas ese iFrame, el mismo origen no se aplica. A continuación, 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. Usted tiene acceso al iFrame.