在我的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'];
但这没有做任何事情!
答案 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方法