【问题标题】:Permitting user agent (chrome) CORS requests programmatically以编程方式允许用户代理 (chrome) CORS 请求
【发布时间】:2018-05-18 20:30:55
【问题描述】:

我需要从其他域的外部 API 获取一些数据。 我使用测试应用程序,在 localhost 上运行,但出现错误:

Access-Control-Allow-Origin 不允许Origin http://localhost

我尝试通过 get 方法访问:https://api.coinmarketcap.com/v1/ticker/

我做了很多搜索并且:

但不幸的是,在我的页面加载时仅通过 AJAX 请求,我无法访问该 API 并收到错误。

我的预测是用户代理 (chrome) 会以某种方式阻止我的请求。 我无法使用 chrome 扩展程序,因为我还想通过无法获取桌面扩展程序的手机访问我的网站。

目前我的解决方案是“代理”,可以访问该 API 和流程的 node.js 服务器如下所示:

FE

-- 提问-->

-- ASK API -->

-- 回应-->

-- 对 FE 的响应 -->

FE 展示一切

FE - 前端,BE - 后端(node.js 代理),API - 外部 API

但我想避免在 BE 上编写不必要的代码。也许有一些解决方案? 就像一些神奇的标题会告诉 chrome 让我在没有任何额外扩展的情况下传递到外部域?

【问题讨论】:

  • 不,你无法在前端绕过 CORS。
  • 我不认为浏览器允许没有 Access-Control-Allow-Origin 标头。

标签: javascript api cors


【解决方案1】:

您是正确的,除非您使用 jsonp 并且相关服务器支持它,否则您无法绕过 CORS 规则。过去使用该股票代码时,我必须完全按照您在 express 中描述的那样构建后端。

FE => BE => Ticker => BE => FE

【讨论】:

    【解决方案2】:

    您可以按照此处所述的一种干净的方式进行操作 - https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

    设置标头值

    访问控制允许来源:*

    您对从服务器加载的第一页的响应。

    【讨论】:

    • Api 设置该标头,因为我可以从 node.js 等访问它,但从 FE 站点 chrome 阻止它。
    【解决方案3】:

    如果你所有的页面都使用 HTML5,你可以尝试使用Window.postMessage

    另一种常见的解决方案是创建代理服务器。

    【讨论】:

    • 如果我正确理解这个想法,那只是为了发布没有收到的消息。
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 2023-03-10
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2019-01-04
    相关资源
    最近更新 更多