【发布时间】:2018-09-10 14:35:21
【问题描述】:
我有一个使用 Play Framework/Java 开发的 REST API 和使用 Angular JS 开发的前端。
我正在尝试使用以下代码从 Angular 客户端向服务器调用 POST 方法:
$scope.login = function () {
console.log('login called');
var loginURL = 'http://localhost:9000/login';
var loginInfo = {
'email': $scope.email,
'password': $scope.password
};
$http({
url: loginURL,
method: 'POST',
data: loginInfo,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
console.log('SUCCESS: ' + JSON.stringify(response));
$scope.greeting = response.status;
}, function (response) {
console.log('ERROR: ' + JSON.stringify(response));
});
}
这是我服务器上的代码:
public Result doLogin() {
ObjectNode result = Json.newObject();
result.put("status", "success");
return ok(result).withHeader("Access-Control-Allow-Origin", "*");
}
这是应用程序配置文件:
#allow all hosts.
play.filter.hosts {
allowed = ["."]
}
#allow CORS requests.
play.filters.cors {
allowedOrigins = ["*"]
}
即使在启用 CORS 之后,我在 Firefox 和 Google Chrome 的控制台中都出现错误:
跨域请求被阻止:同源策略不允许读取位于http://localhost:9000/login 的远程资源。 (原因:CORS 标头“Access-Control-Allow-Origin”缺失)。 错误:{"data":null,"status":-1,"config":{"method":"POST","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":" callback","url":"http://localhost:9000/login","data":{"email":"xxx","password":"xxx"},"headers":{"Content-Type":"application/json ","Accept":"application/json, text/plain, /"}},"statusText":""}
我确实知道服务器正在发送正确的响应和正确的标头,因为当我从 Postman 执行 POST 时,我可以看到响应以及包含 {"Access-Control-Allow-Origin", "* "} 在邮递员中。
那么,可能是什么问题?客户端有什么我遗漏的吗?
【问题讨论】:
标签: angularjs playframework cors