【问题标题】:Restangular api calls to external getting 'No Access Allowed'Restangular api调用外部获取“不允许访问”
【发布时间】:2014-05-29 06:20:50
【问题描述】:

遵循 Restangular 的文档并包含一个示例:

// GET to http://www.google.com/ You set the URL in this case
Restangular.allUrl('googlers', 'http://www.google.com/').getList();

我正在尝试为 angel.co 做同样的事情

$scope.trial = Restangular.allUrl('googlers', 'https://api.angel.co/1/users/267770').getList();

并且不断出错

XMLHttpRequest cannot load https://api.angel.co/1/users/267770. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. 

有什么解决办法吗?

【问题讨论】:

    标签: angularjs angularjs-service restangular


    【解决方案1】:

    服务器 (api.angel.co) 没有响应访问控制标头,导致此错误。

    当向不同于原始域的域发送 XHR 请求时,Web 浏览器会检查服务是否允许这样做。在您的情况下, api.angel.co 需要包含标题 Access-Control-Allow-Origin: * 作为响应的一部分(它没有)。

    假设您无法更改 api.angel.co,另一种方法是构建允许跨域资源共享的服务器端代理(例如在 node.js 中)。

    查看 this 关于跨域资源共享 (CORS) 的精彩文章。

    【讨论】:

    • 感谢@Sebastian 的回答。这听起来可能很愚蠢,但我正在使用 Angular-seed 存储库 (github.com/angular/angular-seed),并在 localhost:8000 上运行。那会是一个 Node.js 服务器吗?当它投入生产时会发生什么?
    • Angular 是一个在浏览器中运行的客户端框架。提议的 node.js 代理将是一个完全独立的组件,使您能够访问 API。它的工作原理如下:浏览器(运行您的 Angular 应用程序)将 API 请求发送到待开发的 node.js 组件(允许 CORS 或在同一主机上运行)。然后,该组件会将请求代理到 api.angel.io 上的实际 API。
    • 是的,我明白了。但是使用 angular-seed 我在 node.js 服务器上运行,不是吗?我有所有的网络服务器文件等。那么我在哪里可以插入代码以允许 CORS?
    • 例如。 stackoverflow.com/questions/20036008/…但没有找到相同的代码
    • 检查this。您应该将其作为一个单独的组件进行开发,而不是将其与 Angular Seed 测试 Web 服务器捆绑在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多