如何修复 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.
所以我搜索并找到了多种解决方案来解决这个问题。
- 在 Chrome 中启用 CORS 解决了错误,但是当我在 heroku 上部署应用程序时,如何通过移动设备访问它而不 运行 进入相同的 CORS 问题。
- 我找到了一个启用 CORS 请求的 proxy API。但由于这是一个位置请求,这给了我代理服务器的位置。所以这不是解决方案。
- 我已经完成了 Whosebug question 并在我的 http 请求中将 header 添加到 header 中,但这并没有解决问题。 (仍然给出相同的错误)。
那么我怎样才能永久解决这个问题呢?我可以用来解决 Fetch API 中 http 请求的 CORS 问题的最佳解决方案是什么?
您应该使用代理解决方案,但将客户端而不是代理的 IP 传递给它。这是您指定的 API 的示例 URL 格式,使用 WikiMedia 的 IP:
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) => {
....
})
});
我正在使用 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.
所以我搜索并找到了多种解决方案来解决这个问题。
- 在 Chrome 中启用 CORS 解决了错误,但是当我在 heroku 上部署应用程序时,如何通过移动设备访问它而不 运行 进入相同的 CORS 问题。
- 我找到了一个启用 CORS 请求的 proxy API。但由于这是一个位置请求,这给了我代理服务器的位置。所以这不是解决方案。
- 我已经完成了 Whosebug question 并在我的 http 请求中将 header 添加到 header 中,但这并没有解决问题。 (仍然给出相同的错误)。
那么我怎样才能永久解决这个问题呢?我可以用来解决 Fetch API 中 http 请求的 CORS 问题的最佳解决方案是什么?
您应该使用代理解决方案,但将客户端而不是代理的 IP 传递给它。这是您指定的 API 的示例 URL 格式,使用 WikiMedia 的 IP:
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) => {
....
})
});