reactjs - 为什么我的 axios 删除函数会出现 CORS 错误?
问题描述
我想不通!
(我已经修改了隐私代码......)
这有效:
curl -vvv -H "Authorization: Bearer 3t8D7CeQ3MDPADCI" -X "DELETE" https://www.blockonomics.co/api/button?uid=8778e542911eb-ff979c
但是在我的 Reactjs 模块中,这不起作用:
// urlDelete = 'https://www.blockonomics.co/api/button?uid='
// item = '8778e542911eb-ff979c'
const handleDelete = async (item) => {
const url = urlDelete + item
await axios
.delete(url, {
headers: {
Authorization: 'Bearer 3t8D7CeQ3MDPADCI',
},
})
.then((res) => {
console.log(res.status)
})
}
错误:
- 未处理的拒绝(错误):网络错误
- 405 方法不允许
- CORS 缺少允许来源
- 跨域请求被阻止:同源策略不允许在https://www.blockonomics.co/api/button?uid=8778e542911eb-27ffea读取远程资源。(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。
- 跨域请求被阻止:同源策略不允许在https://www.blockonomics.co/api/button?uid=8778e542911eb-27ffea读取远程资源。(原因:CORS 请求未成功)。
我尝试将 cors-anywhere 代理添加到 url,但没有成功。我试过使用'GET'和'POST',仍然没有。
为什么 curl 命令有效,而 axios 函数无效?
我真的很感激对此的一些建议。我被困住了!
解决方案
CORS
特定于浏览器,并cURL
在浏览器之外运行。出于安全原因,浏览器不允许从一个地方(如本地主机)提供的 JS 访问另一个域上的资源,除非响应实际上说:“是的,我可以使用 localhost 或 sandys-server.com 进行此调用”或“我对任何人、任何地方都可以打这个电话”。由于 blockonomics.co 没有返回我可以看到的任何CORS 信息,因此您的浏览器不会让您拨打此电话。您可以在浏览器中禁用 CORS(请参阅此答案),但您不应该这样做。另外,如果您的应用程序应该被其他人使用,那么很难让他们在使用它之前禁用 CORS,所以它
如果您无法控制 blockonomics.co 返回的标头,您有几个选项可以继续前进:
代理您的 API 请求。你可以在本地运行一些东西(nginx,一个小的 Flask 应用程序),它将你的请求传递给 blockonomics,并在响应中添加一个允许的 CORS 标头。如果您希望您的应用程序在本地开发环境之外运行,您还需要在 Internet 上安装该代理。请记住,其他人将能够使用它,因此您可能不想在回复中使用通配符!
如果您在生产中不会遇到此问题,则可以在本地模拟响应,也许作为测试的一部分。
推荐阅读
- python - 对于 python 3.7.6 支持哪个 myql-client 版本
- android-studio - 当应用从 android studio 中的最近应用停止时清除 exo 播放器通知
- sql - 创建列并获取最后的数据
- spring - 如何正确实现 Spring Converter?
- c# - ASP.Net Core Web API 中的安全用户操作
- google-cloud-dataflow - 当写入接收器时必须保留事件时间顺序时,apache-beam 是一个不错的选择吗?
- ruby-on-rails - Carrierwave:通过替换原始版本(或:具有与原始文件不同的文件格式的版本)将上传的 PNG 转换为 JPG
- class - 在其他类/Flutter 中使用变量信息
- r - 我可以根据 R 中时间序列中的重复模式创建因子组吗?
- javascript - JavaScript 淡入不正确 - 4 个 div 中有 2 个正确淡入