apache - how - symfony allow cors
Estrategia para CORS: problema con IE10: el estado xhr devuelve 0 para HTTP 401 (0)
Tengo la siguiente configuración en mi servidor:
- Apache HTTP Server está sirviendo una aplicación de interfaz BackboneJS
- Apache Tomcat está sirviendo un backend basado en Java (CORS habilitado).
Todo se ejecuta en un servidor único sobre el que tengo control total.
Actualmente estoy usando com.thetransactioncompany.cors.CORSFilter
en el backend basado en Java para habilitar CORS. Todo parece estar funcionando bien.
Mi interfaz tiene el siguiente código para redirigir al usuario a la página de inicio de sesión en caso de que se produzca una llamada REST no autenticada:
$.ajaxSetup({
statusCode: {
401: function(){
window.location.replace(''/#login'');
},
403: function() {
window.location.replace(''/#denied'');
}
},
cache: false
});
Todo funciona bien en todos los principales navegadores, excepto en IE10.
En IE10, cuando los usuarios no autenticados llaman al servidor REST, el servidor devuelve un HTTP 401 (como debería). El objeto XHR que estoy viendo en el depurador de IE parece haber traducido esto a status = 0
. (En Chrome, puede ver claramente que tiene el status = 401
.
Esto parece ser un error en IE10, donde IE10 trata el estado HTTP 401 como un error de red. La consola muestra:
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied
¿Hay alguna manera de solucionar esto? Puedo agregar manejo para statusCode 0 en
ajaxSetup
pero parece más un hack.¿Hay alguna manera de desactivar CORS por completo mediante algún tipo de configuración de Apache / Tomcat?
Actualmente, mi configuración de apache se configura utilizando vhosts para que las siguientes URL públicas mapeen sus nombres de host / puertos internos correspondientes.
http://mywebapp.com -> http://myrealservername:8080/ -> /var/www/http
http://myrestapi.com -> http://myrealservername:8088/ -> /usr/local/tomcat/webapps/restapi
Sería posible / aconsejable tener Apache
- Continuar atendiendo la aplicación web estática desde http://mywebapp.com/restapi
- exponiendo la API REST en http://mywebapp.com/restapi (manteniéndola "dentro" de la aplicación web).
Si tal configuración fuera posible, ¿ya no necesitaría CORS? ¿Haría las cosas mucho más sencillas a la vez que aumentaría el soporte del navegador?