向公共 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