我的服务器上有以下设置:
- Apache HTTP Server 正在为 BackboneJS 前端应用程序提供服务
- Apache Tomcat 提供基于 Java 的后端(启用了 CORS)。
一切都在我完全控制的单个服务器上运行。
我目前正在使用com.thetransactioncompany.cors.CORSFilter
基于 Java 的后端来启用 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
.
这似乎是IE10 中的一个错误,其中 IE10 将 HTTP 状态 401 视为网络错误。控制台显示:
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied
有没有办法解决这个问题?我可以在其中添加对 statusCode 0 的处理,
ajaxSetup
但这似乎更像是一种 hack。有没有办法通过某种 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
- 继续从http://mywebapp.com/restapi提供静态 webapp
- 在http://mywebapp.com/restapi上公开 REST API (将其保留在 webapp 的“内部”)。
如果这样的设置是可能的,我就不再需要 CORS 了吗?在增加浏览器支持的同时,它会让事情变得更简单吗?