我的服务器上有以下设置:
所有内容都在我完全控制的单个服务器上运行。
我目前在基于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了吗?在增加浏览器支持的同时,它会使事情变得更简单吗?