CORS策略 – IE10问题:HTTP 401的xhr状态返回0

我在我的服务器上有以下设置:

  • Apache HTTP Server正在为BackboneJS前端应用程序提供服务
  • Apache Tomcat正在为基于Java的后端服务(启用CORS)。

一切都运行在一个我完全可以控制的服务器上。

我目前在基于Java的后端使用com.thetransactioncompany.cors.CORSFilter来启用CORS。 一切都注意到工作正常。

我的前端有以下代码将用户redirect到login页面,以防发生未经身份validation的REST调用:

 $.ajaxSetup({ statusCode: { 401: function(){ window.location.replace('/#login'); }, 403: function() { window.location.replace('/#denied'); } }, cache: false }); 

除IE10以外的所有主stream浏览器都能正常工作。

在IE10中,当未经authentication的用户调用REST服务器时,服务器返回一个HTTP 401(它应该)。 我在IEdebugging器hoewever中看到的XHR对象似乎已经将其转换为status = 0 。 (在Chrome上,你可以清楚地看到它的status = 401

这似乎是IE10中的一个错误,IE10将HTTP状态401视为networking错误。 控制台显示:

 SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied 
  • 有没有办法解决这个问题? 我可以在ajaxSetup添加对statusCode 0的处理,但看起来更像是一个黑客。

  • 有没有办法通过某种Apache / Tomcatconfiguration完全禁用CORS?

目前我的apacheconfiguration是使用虚拟主机进行设置的,所以下面的公共URL映射它们相应的内部主机名/端口。

 http://mywebapp.com -> http://myrealservername:8080/ -> /var/www/http http://myrestapi.com -> http://myrealservername:8088/ -> /usr/local/tomcat/webapps/restapi 

有可能/build议有Apache

  • 继续从http://mywebapp.com/restapi提供静态webapp
  • 在http://mywebapp.com/restapi上暴露REST API(将其保留在“webapp”内部)。

如果这样的设置是可能的,我不会再需要CORS了? 在增加浏览器支持的同时,它会使事情变得更简单。