Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 否';访问控制允许原点';请求的资源上存在标头。_Jquery_Angularjs - Fatal编程技术网

Jquery 否';访问控制允许原点';请求的资源上存在标头。

Jquery 否';访问控制允许原点';请求的资源上存在标头。,jquery,angularjs,Jquery,Angularjs,在我的Angularjs应用程序中,当我尝试从YouTube发出GET请求时,我遇到了这个问题(No'Access Control Allow Origin) ... myServices.factory('YouTubeService', function ($resource) { return $resource('http://www.youtube.com/oembed?url=:url', {}, { query: { method: 'GET', isArr

在我的Angularjs应用程序中,当我尝试从YouTube发出GET请求时,我遇到了这个问题(No'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'];

但这没什么用

在我看来,解决这一问题的最佳方法之一是使用代理–我使用在机器上运行的
nginx
为我想要访问的API创建一个代理,并在
nginx
中编写自定义头指令,将头添加到代理的响应中,然后再将其发送到前端

有点像

    location /APIProxy {
            resolver 8.8.8.8; # or the DNS of your choice
            proxy_pass http://<original_api_url>;
            proxy_http_version 1.1;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
    }
location/APIProxy{
解析程序8.8.8.8;#或您选择的DNS
代理传递http://;
proxy_http_版本1.1;
添加标题“访问控制允许源”*;
添加_头“访问控制允许凭据”“true”;
}

有关更多信息,请参阅。

问题在于您尝试调用的服务不允许来自主机的请求。 (即,“访问控制允许原点:*”标题不正确)。最简单的方法是开发一个rest服务器,该服务器将接受请求,然后将其发送到您希望调用的服务。restserver中必须存在以下标头才能正常工作

访问控制允许来源:*(接受来自任何域的请求) 访问控制允许标题:内容类型(允许内容类型标题) 访问控制允许凭据:true(接受cookie和其他凭据)

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

这是如何在php中添加标题

`header('Access-Control-Allow-Origin: *');`
header('Access-Control-Allow-Headers:Content-Type')
标题('Access-Control-Allow-Credentials:true')


您可能也想添加一个选项方法

在此处签出接受的答案:正确!在我看来,YouTube没有提供您想要访问的内容。抱歉,删除了我的评论-所有内容都指向添加
$httpProvider.defaults.useXDomain=true
删除$httpProvider.defaults.headers.common['X-Requested-With']
但这没有什么区别,所以任何人如何使用Angular发出跨站点请求?不能吗???决定发送到后端(节点)并由其处理。不要使用公开访问的DNS服务器,如
8.8.8