You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React向FastAPI发送请求时触发CORS策略错误,寻求解决方法

React向FastAPI发送请求时触发CORS策略错误,寻求解决方法

看起来你已经尝试配置了FastAPI的CORS中间件,但还是踩了跨域的坑,我来帮你一步步排查解决:

首先,确保FastAPI应用正常加载

从你的Python日志里看到,启动初期出现了Error loading ASGI app. Attribute "app" not found in module "maintest".的错误,虽然之后热重载成功了,但这种加载异常可能导致CORS中间件没有正确初始化。建议你先完全停止服务器,再重新运行启动命令:

uvicorn maintest:app --reload --host 0.0.0.0 --port 8000

等服务器完全启动,确认日志里只有Uvicorn running on http://0.0.0.0:8000和Application startup complete.的提示,没有任何加载错误后,再测试前端请求。

调整CORS配置,覆盖本地开发的所有可能源

有时候浏览器会把localhost和127.0.0.1视为不同的源,虽然你已经添加了这两个地址,但可以先临时放宽配置(仅用于开发环境)来验证问题:

# 替换你的origins配置
origins = [
    "http://localhost:3000",
    "http://127.0.0.1:3000",
    "http://localhost",
    "http://127.0.0.1"
]

或者更激进一点,临时用allow_origins=["*"]测试(生产环境绝对不能这么做):

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 仅开发测试用
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

如果这样能解决问题,说明是源地址匹配的问题,之后再调整回具体的origins列表即可。

用React代理绕过CORS(开发环境最省心方案)

React自带了代理功能,你可以在前端项目的package.json里添加代理配置:

"proxy": "http://localhost:8000"

然后修改前端的fetch代码,去掉完整的URL,只用路径:

const response = await fetch("/predict/", {
  method: "POST",
  credentials: 'include',
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify(formData),
});

这样React会自动把请求转发到后端,绕过浏览器的CORS检查,本地开发用这个方法几乎不会踩跨域的坑。

验证后端接口本身是否正常

先排除后端接口的问题,用curl直接请求后端:

curl -X POST http://localhost:8000/predict/ -H "Content-Type: application/json" -d '{"mean_radius":1, "mean_texture":2, "mean_perimeter":3, "mean_area":4}'

如果能得到{"prediction":10}的响应,说明后端接口没问题,问题肯定出在CORS配置或者请求方式上。

最后检查代码细节

确认你的maintest.py里的FastAPI实例拼写正确,是app = FastAPI(),没有写成App或者其他错误的变量名,这是导致启动初期加载错误的常见原因。

备注:内容来源于stack exchange,提问作者dixhom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:18:07