AngularJs -- 对 XMLHttpRequest 的访问已被 CORS 策略阻止

AngularJs -- Access to XMLHttpRequest has been blocked by CORS policy

错误:

Access to XMLHttpRequest at 'http://localhost:8080/api/v1/locations' from origin 'http://localhost:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我在 WebStorm 和 Postman 的 request.http 文件中测试了 get 方法,它工作正常,但在我的 Angularjs 项目中不起作用。 (我从 Spring 引导 java 项目中获得)。

var app = angular.module('myApp', []);
  app.controller('myCtrl', function($scope, $http) {
    $http.get("http://localhost:8080/api/v1/locations")
            .then(function(response) {
              $scope.result = response.data;
              console.log("OK:", response.data);
            }).catch(function(response) {
              console.log("ERROR:", response);
    });
  });

我的 get 函数 return 在 postman 中是这样的

[
 {
   "datetime": "2019-01-10T19:00:00.000+0000",
"user": {
  "firstName": "thr",
  "lastName": "an",
  "id": 1
},
"speed": 0.0,
"latitude": 37.421998333333335,
"longitude": -122.08400000000002,
"id": 1
},

{
   "datetime": "2019-01-10T19:01:00.000+0000",
"user": {
  "firstName": "thr",
  "lastName": "an",
  "id": 1
},
"speed": 1.575,
"latitude": 37.42198333333335,
"longitude": -122.080000000002,
"id": 2
}
]

控制台:https://i.top4top.io/p_1507d02621.jpg

添加一个 .catch 块来记录错误:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
    $http.get("http://localhost:8080/api/v1/locations")
      .then(function(response) {
        $scope.result = response.data;
        console.log("OK:", response.data);
    }).catch(function(response) {
        console.log("ERROR:", response);
    });
});

Postman 通常不使用或考虑 CORS header。另一方面,浏览器需要它,如果它丢失了,你就会得到这个错误。 在您的后端代码中,您应该将用于请求数据的域列入白名单。在您的情况下,这将是 http://localhost:8080。 我希望这是有道理的。