CORS 中间件
CORS 中间件用于解决前端页面调用 API 时可能出现的跨域访问问题。对于前后端分离的项目来说,这是非常常用的配置。
先理解什么是 CORS?
CORS(Cross-Origin Resource Sharing,跨域资源共享)是浏览器的一种安全机制。当前端页面(比如运行在 http://localhost:3000
)想调用另一个域名的 API(比如 http://localhost:8000
)时,浏览器会默认阻止这种“跨域”请求,以防止潜在的安全风险。
添加 CORS 中间件就是告诉浏览器:“允许特定的外部域名访问我的 API”。
逐参数解释代码
# 首先需要从 fastapi.middleware.cors 导入 CORSMiddleware
from fastapi.middleware.cors import CORSMiddleware
# 给 app 添加 CORS 中间件
app.add_middleware(
CORSMiddleware, # 指定要添加的中间件类型
allow_origins=["*"], # 允许哪些域名访问(* 表示允许所有域名)
allow_credentials=True, # 是否允许携带 Cookie 等身份凭证
allow_methods=["*"], # 允许哪些 HTTP 方法(GET、POST、PUT 等,* 表示所有)
allow_headers=["*"], # 允许请求中携带哪些 HTTP 头信息(* 表示所有)
)
每个参数的具体作用
-
CORSMiddleware
这是 FastAPI 提供的 CORS 处理中间件,专门用于处理跨域请求的权限控制。中间件会在每个请求到达你的 API 之前先做一层检查,判断这个请求是否符合跨域规则。 -
allow_origins=["*"]
- 控制“允许哪些域名的前端页面”访问你的 API。
["*"]
是开发阶段的简化配置,表示“允许所有域名”(包括http://localhost:3000
、https://example.com
等)。- 生产环境中通常需要指定具体域名,比如
["https://yourfrontend.com"]
,更安全。
-
allow_credentials=True
- 控制是否允许前端请求携带身份凭证(如 Cookie、Token 等)。
- 如果你的 API 需要用户登录(比如通过 Cookie 保持登录状态),就需要设为
True
。
-
allow_methods=["*"]
- 控制允许哪些 HTTP 方法(GET、POST、PUT、DELETE 等)。
["*"]
表示允许所有方法,也可以指定具体方法,比如["GET", "POST"]
。
-
allow_headers=["*"]
- 控制允许请求中携带哪些自定义头信息(比如
Authorization
头用于传递 Token)。 ["*"]
表示允许所有头信息,也可以指定具体头,比如["Content-Type", "Authorization"]
。
- 控制允许请求中携带哪些自定义头信息(比如
生产环境的安全配置
开发阶段用 ["*"]
很方便,但生产环境建议收紧权限,比如:
app.add_middleware(
CORSMiddleware,
allow_origins=["https://yourfrontend.com", "https://admin.yourfrontend.com"], # 只允许特定域名
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE"], # 只允许需要的方法
allow_headers=["Content-Type", "Authorization"], # 只允许必要的头信息
)