internet-explorer angularjs cors

internet explorer - XMLHttpRequest Acceso denegado con AngularJS en cualquier versión de IE por debajo de 10



internet-explorer cors (3)

En mi caso, los Response Headers contenían

Content-Type:application/json; charset=UTF-8

y este es un problema para IE9, ya que no puede manejar / analizar correctamente los objetos JSON en las respuestas.

Cambiar los Response Headers a

Content-Type:text/plain; charset=UTF-8

Además, asegúrese de tener incluido el siguiente módulo para IE9: https://stackoverflow.com/a/28905072/1202371

permitido recibir la respuesta en texto y luego convertirlo a objeto JSON.

Al ver mi aplicación en cualquier navegador IE de Microsoft de una versión anterior a la 10, recibo el siguiente error extraño en la consola:

Intenté cancelar la consola agregando el siguiente código JavaScript antes de la lib de AngularJ:

console.log = function(){}; window.console = {log: function(){}};

No hizo la diferencia. El mismo error en IE 10 aparece como:

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.

Probablemente estoy tratando de obtener el ''/ me'' de la API para verificar si el usuario está autenticado o es un invitado.

Básicamente. ¡Eliminar esos molestos errores de consola cada vez que el servidor da una respuesta distinta de 2XX o 3XX sería genial!

ACTUALIZACIÓN: Esto parece estar relacionado con el acceso a una API en un subdominio diferente (CORS);


La solución que he podido lograr a través de la guía de un experimentado ng-dev en el grupo Google AngularJS es esta biblioteca xDomain .

La configuración es muy simple, simplemente coloque un archivo proxy.html en la raíz de su API, con una expresión regular / cadena para un origen permitido (''master''), y una referencia al script en la interfaz, y luego apúntelo a esto archivo de su script frontend (''master'').

Funciona abriendo el archivo proxy.html en un iframe y comunicándose con el recurso CORS utilizando postMessage .

Funciona como un encanto con $ http y $ recurso.

También puede mantener un funcionamiento normal para los navegadores normales al colocar el script encima de todas las bibliotecas de JavaScript. Incluye:

<!--[if lte IE 9]> <script src="xdomain.js" slave="http://example.org/proxy.html"></script> <![endif]-->


Por supuesto, su problema está relacionado con CORS. IE10 usa una XmlHttpRequest real, pero antes de eso, IE no. De lejos, la manera más fácil que he encontrado para resolver este tipo de problemas es utilizar apache o nginx para proxy de la API. Por ejemplo, con nginx, en tu servidor {} bloque:

location /api { proxy_pass http://my.server.name:12345/v1; proxy_redirect off; }

Tenga en cuenta que aunque jQuery no sea compatible con XDomainRequest y CORS directamente, debe agregar un complemento para obtener XDR. También tenga en cuenta que XDR tiene algunas limitaciones severas alrededor de CORS.