FastAPI配置 了CORSMiddleware依旧跨域报错

在使用 FastAPI 和 Vue3 进行前后端分离开发时,CORS(跨域资源共享)是一个常见的问题。通常情况下,通过配置 CORSMiddleware 即可解决。

但最近在 Windows 环境下开发时,我遇到了一个极其隐蔽的情况,浏览器持续报 CORS 错误,即使后端配置完全正确也无法修复。排查后发现,根本原因并非代码问题,而是开发工具在重启时残留了僵尸进程。

本文记录了该问题的排查过程和解决方法。

开发环境

  • 后端:FastAPI (Python)

  • 前端:Vue3 + Vite

  • 系统:Windows

起初问题表现得非常标准。前端试图访问后端接口时,浏览器控制台抛出了 Access-Control-Allow-Origin 头缺失的错误,并随后提示 Network Error。按照常规思路,我首先检查了 FastAPI 的 CORSMiddleware 配置,确认 allow_origins 包含了前端的开发地址。为了排除配置过严的可能性,我甚至尝试暂时允许所有来源,但问题依然没有解决。接着考虑到 FastAPI 对 URL 末尾斜杠的敏感性,我仔细核对了前后端的路由定义,排除了因 307 重定向导致的预检请求失败。我也尝试了更换 localhost127.0.0.1,甚至修改了 Uvicorn 的监听地址,但所有的尝试都未能消除那个红色的报错。

在反复修改代码并重启服务的过程中,我注意到一个极易被忽视的反常细节,尽管浏览器一直在报错,但运行后端的终端窗口内却没有任何日志输出。正常情况下,无论是请求被拒还是内部报错,服务端都应该会有相应的记录。终端的静默意味着请求根本没有到达我当前看到的这个 FastAPI 进程。这让我意识到,问题可能出在网络连接或进程本身,而不是代码逻辑。

我打开 Windows 任务管理器发现后台竟然同时运行着多个 python.exe 进程。在 Windows 终端下运行带有热重载(--reload)功能的 Uvicorn 服务时,启动的不仅是主进程,还有负责监听的子进程。当我使用 Ctrl+C 停止服务时,有时系统只终止了父进程,而实际占用端口的子进程未能正常退出,变成了所谓的"僵尸进程"。

这意味着,虽然在编辑器终端里看似重启了服务,但实际上 8000 端口依然被上一次、甚至很久之前的旧进程死死占用。浏览器发出的请求实际上是被这个运行着旧代码(可能是 CORS 配置尚未生效的版本)的僵尸进程接收并拒绝了。这也是为什么当前的新终端里看不到任何访问日志的原因。

解决这个问题的方法非常简单,只需要彻底清理环境。在终端执行 taskkill /F /IM python.exe 命令或者直接在任务管理器强制结束所有 Python 进程,然后重新启动服务。再次刷新前端页面后就恢复正常。

相关推荐
Just Jump1 小时前
2个框架(Tornado/FastAPI)、3个模块(threading/ThreadPoolExecutor/asyncio)的高并发异步实现和对比理解
fastapi·tornado·异步高并发
Li emily1 天前
解决了加密货币api多币种订阅时的数据乱序问题
人工智能·python·api·fastapi
Muyuan19982 天前
31.Cursor 初体验:用 AI Agent 给 PaperPilot 做一次最小工程重构
人工智能·python·重构·django·fastapi·faiss
csdn小瓯2 天前
FastAPI 依赖注入与状态管理实战:构建高可维护的异步后端
fastapi
dinl_vin2 天前
FastAPI 系列(一)· 初体验——从 Spring Boot 工程师视角认识 FastAPI
后端·python·fastapi
海市公约2 天前
从 CRUD 到 AI 工程:基于 FastAPI + Dify 的 AI 面试模拟系统实践
prompt·fastapi·项目实战·dify·ai工作流·后端架构
码界筑梦坊3 天前
120-基于Python的食品营养特征数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi
Muyuan19983 天前
30.通过Claude code做项目系统测试
运维·服务器·人工智能·fastapi
Muyuan19983 天前
29.从 FAISS 到 Milvus:给我的 RAG Agent 项目加一层可替换的向量检索后端
fastapi·milvus·faiss
码界筑梦坊3 天前
123-基于Python的特斯拉超级充电站分布数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi