如何修复 Fetch API 中的 CORS 问题

How do I fix CORS issue in Fetch API

我正在使用 reactjs 构建一个 front-end 唯一的基本天气应用程序。对于 API 请求,我使用 Fetch API。 在我的应用程序中,我从找到的 simple API 获取当前位置 并将位置作为 JSON object。但是当我通过 Fetch API 请求它时,我收到了这个错误。

Failed to load http://ip-api.com/json: Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.

所以我搜索并找到了多种解决方案来解决这个问题。

  1. 在 Chrome 中启用 CORS 解决了错误,但是当我在 heroku 上部署应用程序时,如何通过移动设备访问它而不 运行 进入相同的 CORS 问题。
  2. 我找到了一个启用 CORS 请求的 proxy API。但由于这是一个位置请求,这给了我代理服务器的位置。所以这不是解决方案。
  3. 我已经完成了 Whosebug question 并在我的 http 请求中将 header 添加到 header 中,但这并没有解决问题。 (仍然给出相同的错误)。

那么我怎样才能永久解决这个问题呢?我可以用来解决 Fetch API 中 http 请求的 CORS 问题的最佳解决方案是什么?

您应该使用代理解决方案,但将客户端而不是代理的 IP 传递给它。这是您指定的 API 的示例 URL 格式,使用 WikiMedia 的 IP:

http://ip-api.com/json/208.80.152.201

API 似乎很宽容,回应 Access-Control-Allow-Origin:*

我还没弄清楚是什么导致了你的问题,但我认为这不仅仅是 fetch API

这对我来说在 Firefox 和 Chrome...

中都很好用
fetch('http://ip-api.com/json')
   .then( response => response.json() )
   .then( data => console.log(data) )

如果您正在发出 post、放置或补丁请求,则必须使用 body: JSON.stringify(data)

对您的数据进行字符串化
fetch(URL, 
        {
            method: "POST", 
            body: JSON.stringify(data),
            mode: 'cors',
            headers: {
                'Content-Type': 'application/json',
            }
        }
    ).then(response => response.json())
    .then(data => {
        ....
    })
    .catch((err) => {
        ....
        })
    });