【问题标题】:angular-js cors request not getting to the serverangular-js cors 请求未到达服务器
【发布时间】:2014-10-07 11:21:12
【问题描述】:

我有一个正确配置了 CORS 的 Spring MVC API 后端 当我尝试进行 ajax 调用时,我在 chrome 中收到以下错误

XMLHttpRequest 无法加载 172.20.16.45:8082/cuponza。该请求被重定向到“172.20.16.45:8082/cuponza/”,这对于需要预检的跨域请求是不允许的。

我的js代码在这里:

    $scope.sendRegistrationForm = function(){
        var config = {headers:  {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods' : 'GET,OPTIONS',
        'Access-Control-Allow-Headers' : 'X-Requested-With, Content-Type',
        'Content-Type' : 'text/plain',
        'Accept-Language' : 'en-US'
    }
};
        $http.get("172.20.16.45:8082/cuponza",config).
    success(function(data){
            alert(data);
        }).
        error(function(data,status){
            alert(status);
        })
        }

我尝试使用标志 --disable-web-security 启动 chrome,通过这样做,我能够看到我的服务器端 CorsFilter 正常工作,我也得到了来自服务器的正确响应,这就是为什么我肯定我的错误在客户端。 正常启动chrome时,服务器上的过滤器甚至永远不会启动。

更新:当我删除带有 cors 标头的配置对象时,我收到以下错误

    XMLHttpRequest cannot load 172.20.16.45:8082/cuponza

. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '
    localhost:8100' is therefore not allowed access

更新二 即时显示请求,如 chrome 所示: 正常启动chrome:

选项 /cuponza HTTP/1.1 主机:172.20.16.45:8082 连接:保持活动 访问控制请求方法:GET 来源:本地主机:8100 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 访问控制请求标头:访问控制允许来源、接受语言、访问控制允许标头、访问控制允许方法 接受:/ 参考:本地主机:8100/ 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8

在 --disable-web-security 模式下启动 chrome

GET /cuponza HTTP/1.1 主机:172.20.16.45:8082 连接:保持活动 访问控制允许来源:* 接受语言:en-US Access-Control-Allow-Headers:X-Requested-With,Content-Type 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 访问控制允许方法:GET、OPTIONS 接受:/ 参考:本地主机:8100/ 接受编码:gzip,deflate,sdch

【问题讨论】:

    标签: javascript ajax angularjs tomcat spring-mvc


    【解决方案1】:

    解决方案有两个 在你的前端,你必须像这样添加一个空的配置对象

    var 配置 = {}; 然后将其添加到角度调用中 $http.post(url.config); 这样做的原因是,如果没有空配置对象,角度将方法类型设置为 POST,然后过滤器检查内容类型是否为 text/plain ,并且它不是因为默认情况下未设置,如果您发送空参数,角度将方法设置为选项,然后将不同的逻辑应用于过滤器。

    第二部分 在过滤器设置中的 web.xml 中,您必须添加以下标头:access-control-allow-origin 到允许的标头中,如下所示

    <init-param>
            <param-name>cors.allowed.headers</param-name>
            <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,access-control-allow-origin</param-value>
        </init-param>
    

    有了这个,你的 tomcat 就准备好了 CORS

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2016-09-29
      • 2018-07-21
      • 2016-09-09
      相关资源
      最近更新 更多