我正在使用reactjs构建一个仅前端的基本天气应用程序。对于 API 请求,我使用 Fetch API。 在我的应用程序中,我从我发现的简单 API 获取当前位置 它以 JSON 对象的形式给出位置。但是当我通过 Fetch API 请求它时,我收到此错误。
无法加载http://ip-api.com/json:预检响应中的Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin。
所以我搜索并找到了多种解决方案来解决这个问题。
那么我怎样才能永久解决这个问题呢?我可以用来解决 Fetch API 中 http 请求的 CORS 问题的最佳解决方案是什么?
致无数未来的访客:
如果我原来的答案没有帮助你,你可能一直在寻找:
关于OP面临的问题...
该 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
、put
或 patch
请求,则必须使用 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) => {
....
})
});
您应该使用代理解决方案,但传递的是客户端的IP而不是代理。以下是您指定的 API 的 URL 格式示例,使用 WikiMedia 的 IP: