Restangular No' Access-Control-Allow-Origin'标头出现在请求的资源上

时间:2014-07-03 14:38:32

标签: cors restangular

我尝试使用Restangular对JAX-RS REST服务进行以下调用(即已启用COR)。

    var baseUsers = Restangular.all("users");

    $scope.users = '{[]}';

    $scope.users = baseUsers.getList().then(function(result) {
        console.log("Got users", response.status);
    }, function(response) {
        console.log("Failed to find users with status code", response.status);
    });

但我一直在控制台中看到这个错误:

XMLHttpRequest cannot load http://135.60.151.27:9080/app/users. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8383' is therefore not allowed access.

从POSTMan我可以在响应中看到CORs标题:

Access-Control-Allow-Credentials →true
Access-Control-Allow-Headers →Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since
Access-Control-Allow-Methods →GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin →*
Content-Length →2
Content-Type →application/json
Date →Thu, 03 Jul 2014 14:34:25 GMT
X-Powered-By →Servlet/3.0

我认为REST OPTIONS调用可能是问题,但也是返回相同的CORs头。

1 个答案:

答案 0 :(得分:0)

Access-Control-Allow-Credentials: true不会与Access-Control-Allow-Origin: *

混在一起

the spec中:

  

字符串“*”不能用于支持凭据的资源。

当您允许凭据时,允许任何来源是非常不安全的。这样,您在互联网上访问的任何网站理论上都可以在未经您同意的情况下代表您在您错误配置的网站上行事,甚至在没有您的通知的情况下。

因此,您应该只在Access-Control-Allow-Origin中包含一个主机,或者实现一个系统,如果它与预定义的白名单/正则表达式匹配,则会添加Host请求标头中的主机名。