Javascript 访问控制允许Origin在AngularJS应用程序中不工作
我正在尝试使用我的(CORS兼容的)RESTful服务Javascript 访问控制允许Origin在AngularJS应用程序中不工作,javascript,angularjs,rest,jersey,cors,Javascript,Angularjs,Rest,Jersey,Cors,我正在尝试使用我的(CORS兼容的)RESTful服务 @Path("/greeting") @GET @Produces("application/json") public Response greeting() { String result = "{\"id\":1,\"content\":\"Hello, World!\"}"; return Response.ok() //200 .entity(result) .h
@Path("/greeting")
@GET
@Produces("application/json")
public Response greeting() {
String result = "{\"id\":1,\"content\":\"Hello, World!\"}";
return Response.ok() //200
.entity(result)
.header("Access-Control-Allow-Origin", "*")
.build();
}
来自我的AngularJS应用程序
function ($scope, $http) {
$scope.dashboard = "ESCO Dashboard";
console.log('start');
// Simple GET request example:
$http({
method: 'GET',
url: 'http://localhost:8080/NobelGrid/api/users/greeting'
}).then(function successCallback(response) {
console.log('success');
$scope.greeting = response.data;
}, function errorCallback(response) {
console.log('error');
});
console.log('end');
}
但我有一个错误:
无法加载XMLHttpRequest。对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。因此,不允许访问源“”
使用Chrome的控制台网络,这似乎是正确的,因为响应头是:
不管怎样,从浏览器而不是从Angular应用程序访问REST服务,标题都是正确的
我还尝试了本教程:
使用他们的RESTful服务(他们说CORS也兼容),但结果是一样的
ps:我正在使用WebStorm作为IDE
更新-已解决
在服务器端写入此处理程序:
@Path("/greeting")
@OPTIONS
@Produces("application/json")
public Response greetingOPT() {
return Response.status(200) //200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS")
.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
.build();
}
它起作用了。开始时,它给了我另一个错误:
飞行前[…]中的访问控制允许标头不允许请求标头字段授权
但是在GET和POST的
访问控制允许标题中添加授权
可以解决问题。查看错误消息:
对飞行前请求的响应
查看网络日志:
请求方法:选项
看看你的API:
@得到
在浏览器向您编写的处理程序发出GET请求之前,您需要为编写一个处理程序。Hi@Quentin!我不太明白(对不起):我必须为服务器端的选项编写一个处理程序?或者我必须在客户端制作一些东西?谢谢,您必须为服务器上的选项编写一个处理程序(或者更改请求,使其不需要飞行前检查(具体内容在回答中的链接另一端描述))。谢谢#昆廷!你能看看我的最新消息吗?