CORS con acceso IE11 + denegado con SSL a localhost

La versión muy corta: ¿alguien está solicitando con éxito resources locales a través de AJAX, en IE, a través de SSL? No puedo resolver la obtención de un error de "acceso denegado".


La versión más larga:

Estoy usando AJAX para recuperar JSON desde una aplicación que ejecuta un service web local. El canal del service web está encryption, de modo que si el sitio remoto se sirve a través de HTTPS, no aparece ningún error de "recurso inseguro en una página segura".

Entonces, en la barra de direcciones hay un sitio remoto de algún tipo … mysite.com. Está recibiendo información de https://localhost/ .

El service web está configurando encabezados correctos para CORS y todo funciona en Chrome y Firefox. En IE, si pongo mi recurso https://localhost en la barra de direcciones, se devuelve y se muestra el recurso correcto. Sin embargo, cuando se usa AJAX (no solo la barra de direcciones), una configuration de security en IE niega el acceso. Esto está documentado (en parte) aquí:

Acceso denegado en IE 10 y 11 cuando el objective ajax es localhost

La única solución adecuada en una respuesta es agregar el dominio solicitante (mysite.com en este caso) a los sitios confiables. Esto funciona, pero preferiríamos no tener intervención del usuario … apuntar a un artículo de la base de conocimiento sobre cómo agregar un sitio confiable no es una gran experiencia para el usuario. Las otras respuestas a esa pregunta no son válidas por las mismas razones que a continuación ->

Algunos más tropezando y descubrí esto:

CORS con IE, XMLHttpRequest y ssl (https)

Que tenía una respuesta que contenía un contenedor para requestes AJAX en IE. Parecía prometedor, pero resulta que IE11 ahora ha desaprobado la API XDomainRequest. Esto fue probablemente lo correcto para Microsoft … pero ahora la solución alternativa de "hackear" de agregar un controller void onProgress al object XDR obviamente no es una opción y la envoltura provisional que alguna vez fue prometedora se vuelve nula e inválida.

¿Alguien se ha encontrado ya sea:

a) una forma de get esas requestes sin necesidad de modificar los sitios confiables en IE? En otras palabras, ¿una versión actualizada de la solución en el segundo enlace?

b) como un "siguiente mejor caso": ¿una forma de solicitar al usuario que agregue el sitio a su zona de confianza? "mysite.com desea ser agregado a sus zonas de confianza. Confirme Sí / No" y lo haya hecho, sin que realmente tengan que abrir sus dialogs de configuration nativos y hacerlo manualmente?

Por razones de security, el object XDomainRequest de Internet Explorer bloquea el acceso ( vea el n. ° 6 aquí ) a la Zona de Intranet desde la Zona de Internet. No me sorprendería saber que este bloque se transfirió a la implementación IE10 + CORS para el object XMLHTTPRequest.

Un enfoque que puede ayudar es simplemente cambiar de localhost a 127.0.0.1 ya que este último se trata como Internet Zone lugar de Intranet Zone y como consecuencia se evita el cruce de zona.

Sin embargo, debe tener en count que Internet Explorer 10+ bloqueará todos los accesos a la computadora local (a través de cualquier dirección) cuando un sitio se ejecute en Modo protegido mejorado (EPM); consulte "Bucle invertido" en esta publicación . Actualmente, IE usa EPM solo para sitios de Internet cuando se ejecuta en el modo de navigation Metro / Immersive (no en el escritorio) pero esto podría cambiar en el futuro.

No, no hay ningún mecanismo para mostrar la IU de configuration de zonas desde JavaScript o mover un sitio de una zona a otra automáticamente. Sin embargo, el hecho de que tenga un server local implica que ya está ejecutando código en el cliente, lo que significa que podría usar la API adecuada para actualizar el mapeo de zonas en el cliente. Tenga en count que dicho cambio requiere que CLARAMENTE obtenga permiso de usuario primero, para que su instalador no sea tratado como malware por Windows Defender y otros productos de security.

Entonces, en resumen, usar la dirección IP debería servir como una solución alternativa para muchas plataforms, pero no para todas.

Como se trata de dos dominios diferentes, una solución sería crear una aplicación que envíe las requestes en la dirección que desee.

Si tienes control sobre el final de example.com y quieres ayudar a los usuarios que traen su propio service localhost, esto sería más difícil, ya que tendrías que proporcionar más requisitos para lo que traen.

Sin embargo, si tiene control sobre lo que se ejecuta en localhost, y quiere acceder a example.com, y hacer que acceda al service localhost, configure la networkingirección en su server web de preference o use un proxy inverso. Puede agregar un punto final a la misma aplicación localhost que no se solape con las routes, por ejemplo, enrute http://localhost/proxy/%1 a http://%1 , dejando el rest de localhost solo. O bien, ejecute un proxy en, por ejemplo, http://localhost:8080 que realice una networkingirección similar, y pueda servir example.com desde una ruta, y la API desde otra.

Esto termina siendo un tipo de "pegamento" o código de integración, que debería permitirle simular interacciones hasta cierto punto.