向公共 API 发出请求时出现“无 'Access-Control-Allow-Origin' 标头”错误

Posted

技术标签:

【中文标题】向公共 API 发出请求时出现“无 \'Access-Control-Allow-Origin\' 标头”错误【英文标题】:"No 'Access-Control-Allow-Origin' header" error when making a request to a public API向公共 API 发出请求时出现“无 'Access-Control-Allow-Origin' 标头”错误 【发布时间】:2018-08-26 22:18:03 【问题描述】:

这是我尝试向其发出请求的 API 的 the documentation。 相关部分:

公共数据功能

代码

GET https://kiwi-coin.com/api/ticker/

返回 JSON 对象:

最后 - 最后 BTC 价格 日期-价格日期 high - 迄今为止的过去 24 小时最高价 低价 - 迄今为止的过去 24 小时低价 vwap - 迄今为止的过去 24 小时成交量加权平均价格:vwap 音量 - 截止日期前 24 小时的音量 bid - 最高买入订单 询问 - 最低卖出订单

这是我的代码:

$.ajax(
  type: "GET",
  url: "https://kiwi-coin.com/api/ticker/",
);

是的,没有办法处理响应。暂时忽略这个, 我只是专注于让请求生效。

这是我在控制台中遇到的错误:

无法加载https://kiwi-coin.com/api/ticker/:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'https://cloud-rooster.glitch.me'。

我做错了什么?此 API 适用于其他用户(例如机器人)。

我查看了其他标题类似的问题,但从我所能得出的答案中,所有问题都涉及对服务器进行更改,在这种情况下,这不是一个选项。

【问题讨论】:

【参考方案1】:

如果 API 服务器不支持 CORS,有两种选择:

    JSONP。尽管没有足够的权限你不能制作跨域 XHR,但你可以从任何地方包含一个 javascript 文件。如果 API 服务器返回类似 callback( json data ...) 的内容,那么您可以使用这些数据而无需费劲。然而,KiwiCoin 似乎并不支持这一点。 从与您的客户端应用程序相同的源(可能是托管您的 html/JS 文件的同一台服务器)运行您自己的服务器,并在您的服务器上拥有转发到 API 服务器的端点。这是万无一失的。

我在查看您的代码时注意到的一件事是您调用了process.env,而浏览器中不存在该调用。这可能是您需要尝试选项 #2 的标志!

【讨论】:

process.env 专门用于 Glitch 环境 :) 它在客户端代码中不起作用,我只是将详细信息放在那里以保密。【参考方案2】:

原来我是从客户端(在浏览器中)而不是服务器端(在 Node.js 环境中)运行该函数。

呃!

问题解决了。

【讨论】:

以上是关于向公共 API 发出请求时出现“无 'Access-Control-Allow-Origin' 标头”错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:使用 Fetch API 向第三方 API 发出 GET 请求时出现“TypeError:无法获取”

在 Express.js 上使用 Axios 向 Spotify API 发出 POST 请求时出现错误 400

发出获取请求时出现多个问号

使用 Go 向 APNS 发出推送请求时出现 403 禁止错误。我是不是正确创建了 JWT?

向 SWR 发出请求时出现打字稿问题

向服务器发出发布请求时出现 Json 错误