【问题标题】:"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 适用于其他用户(例如机器人)。

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

【问题讨论】:

    标签: api cors xmlhttprequest


    【解决方案1】:

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

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

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

    【讨论】:

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

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

    呃!

    问题解决了。

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2013-04-26
      • 2014-02-01
      • 1970-01-01
      • 2017-08-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多