angular-js cors 请求未到达服务器
Posted
技术标签:
【中文标题】angular-js cors 请求未到达服务器【英文标题】:angular-js cors request not getting to the server 【发布时间】: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
【问题讨论】:
【参考方案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
【讨论】:
以上是关于angular-js cors 请求未到达服务器的主要内容,如果未能解决你的问题,请参考以下文章
服务器中的 C# webapi Cors Option 请求返回错误 404 未找到
为啥即使未启用 CORS,HTTP 请求也会在 Action 中处理? [复制]