CORS在angular的公共API调用中出现问题,但直接在浏览器中可以正常工作

CORS在angular的公共API调用中出现问题,但直接在浏览器中可以正常工作,angular,cors,Angular,Cors,有一个公共API,当直接从浏览器点击时会给出响应。我正在使用Chrome浏览器。下面是API- 当我从angular访问相同的API时,它给出了以下错误- 访问位于“”的XMLHttpRequesthttps://query1.finance.yahoo.com/v7/finance/chart/?range=7d&interval=1m“起源”http://localhost:4200'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头 下

有一个公共API,当直接从浏览器点击时会给出响应。我正在使用Chrome浏览器。下面是API-

当我从angular访问相同的API时,它给出了以下错误-

访问位于“”的XMLHttpRequesthttps://query1.finance.yahoo.com/v7/finance/chart/?range=7d&interval=1m“起源”http://localhost:4200'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头

下面是我的代码-

this._http.get(url).subscribe(
      (resp) => {
          console.log(resp);
      },
      (error) => {
        console.log(error);
      }
);

建议使用以下命令-chrome.exe--user data dir=“C:/chrome dev session”--禁用web安全性。它可以工作,但我想要一个与普通浏览器一起工作的解决方案。因为一旦我托管了它,普通用户显然不会使用该命令。

默认情况下,不受信任的站点不允许向其他站点发出请求。CORS允许目标网站对此进行豁免(但出于明显的原因,不是请求网站),但由于您可能无法控制雅虎的web服务器,因此您无法做到这一点。因此,您无法从Angular客户端应用程序直接访问Yahoo API

但是,您可以从服务器访问数据,然后将数据转发到您的Angular客户端应用程序。出于开发和生产目的,您还可以为此使用第三方CORS代理。提供这样一个免费的代理服务器,它将转发附加到
https://thingproxy.freeboard.io/fetch/

例如,您可以使用类似以下内容的代码:

function getCorsProxiedUrl(url: string): string
{
    return `https://thingproxy.freeboard.io/fetch/${url}`;
}
this.\u http.get(getCorsProxiedUrl(url)).subscribe(
(resp)=>{
控制台日志(resp);
},
(错误)=>{
console.log(错误);
}
);

如果您直接点击它,根据定义,这不是一个跨来源请求。谢谢,这很有效。但是,保持对代理服务器的依赖真的是个好主意吗?它可能在将来不存在或改变,在这种情况下,我们将不得不移动到另一个代理服务器。这个解决方案适用于我的情况,但是如果我们想在一个重要的产品环境中实现它,有什么解决方法吗?thingproxy代理服务器是开源的,所以你可以在本地托管它,或者你可以开发你自己的代理服务器。除此之外,如果不控制雅虎的服务器,就没有其他解决办法。