【问题标题】:How to do a server side API call in angular to bypass CORS error如何以角度进行服务器端 API 调用以绕过 CORS 错误
【发布时间】:2018-06-27 20:08:44
【问题描述】:

您好,我构建了一个 Angular 应用程序(Angular 6),它在客户端执行 api 请求。简单的 api 请求位于 service.ts 文件中,如下所示:

  getApi(endpoint) {
    return this.http.get(`https://www.myapi.com/api-${endpoint}`);
  }

当用户单击 .html 文件中的按钮时,将调用此 getApi 函数。

然后是这个问题,我在尝试执行http get请求时在控制台中收到以下错误。

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

通过安装this CORS 插件,我能够绕过此错误并成功获取请求。通话有效,我的应用程序有效,所以我知道我的代码有效。我希望我的应用在没有这个插件的情况下也能正常工作。

经过一些研究,我了解到这是我正在使用的 API 的问题,而不是我的应用程序问题。我什至联系了 api 支持并得到了这个回复:

I checked with the Devs and they confirmed that our API is not designed to be consumed from JS. JS -> SERVER WRAPPER -> AHREFS API (this is how the flow should be). So you should create a server-side wrapper to use AHREFS API.

那么现在我的问题来了,JS/angular 中的 server wrapper 到底是什么?听起来我需要从服务器端而不是客户端调用 API,但我还不知道该怎么做。

由于我没有提供我的整个代码,所以我不是在寻找人来重写我的代码以使其正常工作,而是我更希望有人为我指出正确的方向,以解决我的问题,也许是一些示例代码、理论,或外部阅读的链接。尽管如果需要,我愿意提供我的代码。

我希望有一个解决方案,而无需重新编写我的整个应用程序。但如果需要,我会的。

谢谢!

【问题讨论】:

  • 如果您提供正在使用的后端语言和/或框架,我可以为您指明正确的方向。
  • 您如何托管您的网站?托管您网站的服务器上有后端代码,该代码将连接到 api。
  • Liquidweb 似乎面向 WordPress 托管(这是非常标准的),因此您应该能够运行 php.ini。所以基本上,您需要做的就是在您的 public_html 文件夹中放置一个 php 文件,然后对该 PHP 文件进行编码以 ping API。 PHP 文件可以通过您提供给该文件的 url 访问://yoursite.com/file.php 如果您正在运行本地服务器(例如 MAMP、WAMP 等),您可以在本地进行测试。如果您不这样做没有这些,如果你的电脑上安装了 PHP 语言,你可以通过终端运行一个简单的 PHP 服务器。
  • 另外,如果你想在你的答案中加入最后一条评论,我会接受它
  • 我确实更新了我的答案。

标签: angular http get


【解决方案1】:

简短的回答是server wrapper 将是您的前端代码对您自己站点服务器的调用。然后服务器端代码会发出 API 获取请求。

API 必须手动启用基于浏览器的请求,因为此类请求的默认处理是禁止它们。之所以制定此政策,是因为基于浏览器的对不同域的请求很容易被用于发出恶意请求,通常称为Cross-site request forgery

编辑

在得知您的网站托管在 Liquidweb 上之后,以下内容应该可以让您进行您需要做的服务器端编码。

Liquidweb 似乎面向 WordPress 托管(这是非常标准的),因此您应该能够运行 php。

所以基本上,您需要做的就是在您的 public_html 文件夹中放置一个 php 文件,然后对该 PHP 文件进行编码以 ping API。 PHP 文件可以通过您提供给该文件的 url 访问://yoursite.com/file.php 如果您正在运行本地服务器,例如 MAMP、WAMP 等,您可以在本地测试它。

如果你没有这些,如果你的电脑上安装了 PHP 语言,你可以通过终端运行一个简单的 PHP 服务器。

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 2021-03-09
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2019-04-30
    • 2020-01-04
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多