【发布时间】: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