4

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

  • 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

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

4

0 回答 0