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

时间:2013-10-06 09:33:42

标签: apache xmlhttprequest internet-explorer-10 cors virtualhost

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

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

所有内容都在我完全控制的单个服务器上运行。

我目前在基于Java的后端使用com.thetransactioncompany.cors.CORSFilter来启用CORS。一切都很好。

我的前端有以下代码将用户重定向到登录页面,以防发生未经过身份验证的REST调用:

$.ajaxSetup({

    statusCode: {
        401: function(){
            window.location.replace('/#login');

        },

        403: function() {
            window.location.replace('/#denied');
        }
    },
    cache: false
});

除IE10外,所有主流浏览器都能正常运行。

在IE10中,当未经过身份验证的用户调用REST服务器时,服务器返回HTTP 401(应该如此)。我在IE调试器中看到的XHR对象似乎已将其转换为status = 0。 (在Chrome上你可以看到它有status = 401

这似乎是a bug in IE10,其中IE10将HTTP状态401视为网络错误。控制台显示:

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

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

目前我的apache配置是使用vhosts设置的,以便以下公共URL映射其对应的内部主机名/端口。

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

是否有可能/建议使用Apache

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

0 个答案:

没有答案