【问题标题】:Access external API from Firebase Hosted React App Created Using CRA从使用 CRA 创建的 Firebase 托管的 React 应用程序访问外部 API
【发布时间】:2020-05-01 11:09:09
【问题描述】:

我有一个托管在 Firebase 上的 React 应用程序(CRA),我正在尝试访问外部 Rest API(使用 javascript 的 fetch()),但由于该 API 与 web-app 不在同一个域中,所以它引发“CORS”错误。 API 的标头 Access-Control-Allow-Origin* 。 我可以在开发模式下使用package.json 中的代理解决此问题,但在托管应用程序后似乎没有任何效果。

尝试了以下方法

  • 更新了 Firebase.json 以包含标题
  • no-cors 模式同时使用 fetch()

【问题讨论】:

    标签: reactjs firebase api cors create-react-app


    【解决方案1】:

    正确的 CORS 标头是 Access-Control-Allow-Origin,而不是 Access-Control-Origin。此外,根据请求的性质,您可能需要 preflight request 并且可能无法使用 * 作为来源。

    您无法在客户端绕过 CORS - 它被明确设计为一种浏览器安全机制,以防止意外的跨域请求。如果您可以控制 API 服务器,则应该能够解决此问题。如果不这样做,您可能需要使用 Cloud Function 将请求代理到外部 API。

    【讨论】:

    • 感谢您的回复。我拼错了标题值(将编辑问题)。我也尝试过创建云功能并尝试将其作为“重写”来访问,但这也不起作用。
    • 如 Answerer 所说,如果 Asker 无法控制 API,则使用云函数是一种方法。问题是,除非您使用付费计划,否则 Firebase 不允许外部 API 请求 - 因此请考虑在 Firebase 中对此类请求进行故障排除时:stackoverflow.com/questions/51123462/…
    • 功能重写是否不支持 europe-west-1 区域? @michael bleigh
    • 目前仅支持 us-central1 进行 Cloud Functions 重写。 Cloud Run rewrites 支持 Cloud Run 的所有生产区域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2021-09-19
    • 2020-06-09
    • 2019-07-11
    相关资源
    最近更新 更多