【发布时间】:2015-11-19 16:27:23
【问题描述】:
我正在使用 AngularJS 向 Java 后端发送请求。
在 AngularJS 中,我是这样做的:
return $http({
method: 'POST',
url: 'http://localhost:8180/sample/user',
data: userData,
headers: {'Content-Type': 'application/json'}
})
.success(function (data, status, headers) {
alert(data);
})
.error(function (data, status) {
console.log("Request failed with status: " + status);
});
AngularJS 应用通过 http-server 命令在 localhost:8000 运行:
http-server -a localhost -p 8000
在 Java 后端,我添加了一个过滤器,并在过滤器中设置了标题:
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8000");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Origin, X-Requested-With, Accept, Access-Control-Request-Method, Access-Control-Request-Headers");
response.setHeader("Access-Control-Allow-Credentials", "true");
此 Java 应用程序正在 localhost Tomcat 服务器上运行:localhost:8180
但我仍然在 chrome 的控制台中收到 CORS 错误提示:
请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'http://localhost'。
我在 Response 的标头中找到了:
Allow:POST, OPTIONS
Content-Length:0
Date:Tue, 25 Aug 2015 18:19:46 GMT
Server:Apache-Coyote/1.1
有谁知道跨域请求失败的原因,即使我设置了标头?
而在 app.js 中,我也有这样的设置:
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
================================================ ==============================
最后我通过添加来自link 的过滤器解决了这个问题
我在下面添加了一个答案,希望这也可以帮助有类似问题的其他人。
【问题讨论】:
-
你有拦截器吗,如果有的话放在那里 $http.defaults.useXDomain = true;否则,请在您提出请求时添加