我构建了一个在客户端执行API请求的Angular 6应用程序。简单的 API 请求位于 service.ts 文件中,如下所示:
getApi(endpoint) {
return this.http.get(`https://www.myapi.com/api-${endpoint}`);
}
当用户单击.html文件中的按钮时,将调用此getApi
函数。
然后是这个问题,我在尝试执行http get请求时在控制台中收到以下错误。
请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"http://localhost:4200"。
我能够通过安装此 CORS 插件绕过此错误并成功获取请求。调用有效,我的应用程序有效,因此我知道我的代码有效。我希望我的应用程序在没有此插件的情况下运行。
经过一些研究,我了解到这是我使用的 API 的问题,而不是我的应用程序问题。我什至联系了 API 支持并得到了以下响应:
我与开发人员进行了检查,他们确认我们的API不是为从JS消费而设计的。JS -> SERVER WRAPPER -> AHREFS API(这是流程应该的样子(。所以你应该创建一个服务器端包装器来使用 AHREFS API。
所以现在我的问题是,JS/Angular 中的"服务器包装器"到底是什么?听起来我需要从服务器端而不是客户端调用 API,但我还不知道该怎么做。
我正在寻找示例代码、理论或外部阅读的链接。 我更喜欢一个不需要重写整个应用程序的解决方案,但如果需要,我会这样做。
简短的回答是,server wrapper
是前端代码对自己站点服务器的调用。然后服务器端代码将发送 API get 请求。
API 必须手动启用基于浏览器的请求,因为此类请求的默认处理方式是禁止它们。之所以实施此策略,是因为对不同域的基于浏览器的请求很容易用于发出恶意请求,通常称为跨站点请求伪造。
编辑
在得知您的网站托管在liquidweb上后,以下内容应该使您能够进行您需要做的服务器端编码。
Liquidweb似乎面向WordPress托管(这是非常标准的(,所以你应该能够运行php。
所以基本上,你需要做的就是在你的public_html文件夹中放一个php文件,然后编写该PHP文件来pingAPI。PHP文件可以通过您提供给该文件的URL访问://yoursite.com/file.php 如果您正在运行本地服务器(如MAMP,WAMP等(,则可以在本地对此进行测试。
如果你没有这些,如果你的电脑上安装了PHP语言,你可以通过终端运行一个简单的PHP服务器。