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

时间:2014-05-30 11:01:21

标签: jquery angularjs

在我的Angularjs应用中,当我尝试从YouTube发出GET请求时,我遇到了这个问题(没有'Access-Control-Allow-Origin )。

...
myServices.factory('YouTubeService', function ($resource) {
    return $resource('http://www.youtube.com/oembed?url=:url', {}, {
        query: { method: 'GET', isArray: true },
    })
});
...

呼叫:

YouTubeService.query({url: url}, function(response) {
    alert(response)
})

我知道这与从不同的域提出请求有关,但我不知道如何绕过它。关于此问题已经有很多问题,但我无法从中获取任何问题。

我在配置块中试过这个:

delete $httpProvider.defaults.headers.common['X-Requested-With'];

但这没有做任何事情!

2 个答案:

答案 0 :(得分:1)

在我看来,解决它的最好方法之一是使用代理 - 我在机器上运行nginx并为我想要访问的API创建代理,并在{中编写自定义头指令{1}}在将代码发送到前端之前,将代码添加到代理的响应中。

喜欢的东西;

nginx

有关更多信息,请参阅this

答案 1 :(得分:0)

问题是您尝试呼叫的服务不允许来自主机的请求。 (I.E.不是“Access-Control-Allow-Origin:*”标题)。最简单的方法是开发一个接受请求的休息服务器,然后将其发送到您想要呼叫的服务。您的restserver中必须包含以下标题才能使其正常工作

  

Access-Control-Allow-Origin:*(接受来自任何域的请求)   Access-Control-Allow-Headers:Content-Type(允许内容类型标题)   Access-Control-Allow-Credentials:true(接受cookie和其他凭据)

如果您正在使用PHP开发restserver,您应该在restserver类的构造函数或方法函数的开头添加标题(例如public function post())

这是如何在php中添加标题

`header('Access-Control-Allow-Origin: *');`

header('Access-Control-Allow-Headers: Content-Type'); header('Access-Control-Allow-Credentials: true');

您可能还想添加OPTIONS方法