2026/4/15 22:27:19
网站建设
项目流程
鹤壁网站制作,wordpress美图插件,修改网站空间服务器密码,wap网站开发教程我分 3 层 给你讲清楚#xff1a;① 这段 CORS 代码到底干嘛
② FastAPI 和 Vue 是如何“前后端交互”的
③ 浏览器在中间扮演了什么角色#xff08;为什么不加 CORS 会报错#xff09;你看完这部分#xff0c;前后端交互在你脑子里会是“透明的”。一、这段 CORS 代码是不…我分3 层给你讲清楚① 这段 CORS 代码到底干嘛② FastAPI 和 Vue 是如何“前后端交互”的③ 浏览器在中间扮演了什么角色为什么不加 CORS 会报错你看完这部分前后端交互在你脑子里会是“透明的”。一、这段 CORS 代码是不是“用来前后端交互的”❌ 不完全是✅ 它是「允许浏览器发起跨域请求」的开关你的代码 fromfastapi.middleware.corsimportCORSMiddleware origins[http://localhost:8080]app.add_middleware(CORSMiddleware,allow_originsorigins,allow_credentialsTrue,allow_methods[*],allow_headers[*],)它的真实作用是告诉浏览器「来自http://localhost:8080的网页 可以合法访问我这个 FastAPI 服务」⚠️ 注意一句非常重要的话FastAPI 和 Vue 本身不需要 CORSCORS 是“浏览器的安全策略”二、FastAPI 和 Vue 是如何真正“交互”的核心原理 本质一句话Vue 用 HTTP 请求调用 FastAPI 的 API就像浏览器 → HTTP → FastAPI → 数据库三、真实的请求链路你现在的项目你现在的架构是Vue (localhost:8080) | | HTTP 请求axios / fetch ↓ FastAPI (localhost:8000) | | SQLAlchemy ↓ PostgreSQL (Docker / Linux)四、一步一步拆解「一次前后端交互」① Vue 发起请求浏览器里axios.post(http://localhost:8000/api/v1/stats,{category:CI_JOB,value:10})⚠️ 这一步发生在浏览器里不是 Node② 浏览器检查跨域了吗项目VueFastAPI协议httphttp域名localhostlocalhost端口80808000端口不同 跨域③ 浏览器说我不信任这个请求 于是浏览器先发一个OPTIONS 预检请求问 FastAPI“你允许localhost:8080调用你吗”④ FastAPI 的 CORS 中间件回应你的代码让 FastAPI 回答Access-Control-Allow-Origin: http://localhost:8080 Access-Control-Allow-Methods: * Access-Control-Allow-Headers: *浏览器一看“OK是合法的 ”⑤ 真正的 POST / GET 请求才被发送FastAPI 路由执行router.post(/stats)defcreate_stat(...):...数据写入 PostgreSQL⑥ FastAPI 返回 JSON{id:1,category:CI_JOB,value:10,created_at:2025-01-01T12:00:00}⑦ Vue 拿到数据更新页面响应式this.stats.push(res.data)页面自动刷新 ✔五、关键认知谁和谁在通信角色作用Vue负责 UI 发 HTTP 请求浏览器安全检查CORSFastAPI提供 APIPostgreSQL存数据Vue ≠ 后端FastAPI ≠ 前端 它们只是通过HTTP 协议对话六、为什么 curl / Postman 不需要 CORS你可能注意到curlhttp://localhost:8000/api/v1/stats 永远不会报 CORS 错原因只有浏览器才实现 CORSPostman / curl 直接发 HTTP七、生产环境为什么“又不需要 CORS”开发环境你现在Vue: http://localhost:8080 FastAPI: http://localhost:8000 不同端口 → 跨域 → 要 CORS生产环境常见https://stats.company.com ├── / → Vue └── /api → FastAPI同域名、同端口根本没有跨域问题八、你的这段 CORS 写法是否正确结论✅ 现在完全正确开发期推荐origins[http://localhost:8080]⚠️ 不推荐这样不安全allow_origins[*]九、给你一张「前后端交互心智模型」Vue (页面) ↓ axios / fetch 浏览器CORS 检查 ↓ FastAPI API ↓ 数据库