生产环境不能用["*"]配allow_credentials=true,否则浏览器静默丢弃带cookie或authorization的请求;预检options失败导致无后端日志;必须显式列出全匹配域名、包含authorization等必要头、正确注册中间件顺序。

生产环境不能用 ["*"] 配 allow_credentials=True,否则浏览器会静默丢弃带 Cookie 或 Authorization 的请求——这不是后端没响应,而是根本没发出去。
为什么前端发 POST 却收不到任何后端日志?
这是典型的预检(OPTIONS)失败。浏览器在发真实请求前,先发一个 OPTIONS 请求试探权限,但中间件没正确返回 CORS 头,导致预检被拦在网关外。
-
allow_origins写成["*"]且启用了allow_credentials=True→ FastAPI 直接跳过该中间件,不加任何 CORS 头 -
allow_headers没包含"Authorization"或"Content-Type"→ 预检响应缺少必要头,浏览器判定不通过 - 前端地址是
https://app.example.com,但配置里写成http://app.example.com或漏了www.→ 协议、子域、端口必须完全匹配
生产环境必须显式列出域名,不能依赖通配符
哪怕只服务一个前端域名,也要写死全路径,包括协议和端口(如果非标准)。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 正确示例:
allow_origins=["https://myapp.com", "https://admin.myapp.com"] - 错误写法:
allow_origins=["*"]、allow_origins=["myapp.com"]、allow_origins=["https://*.myapp.com"](通配符不支持子域泛匹配) - 若需多级子域,改用
allow_origin_regex:allow_origin_regex=r"https://.*\.myapp\.com"
CORSMiddleware 参数哪些不能省?
最小安全配置必须明确指定 allow_origins 和 allow_credentials,其他参数虽有默认值,但默认值往往不够用。
-
allow_origins:不能为空或["*"](当allow_credentials=True时) -
allow_credentials:只要前端要传 Cookie 或 Bearer Token,就必须设为True,且allow_origins必须精确匹配 -
allow_methods:建议显式列出,如["GET", "POST", "PUT", "DELETE", "OPTIONS"],避免暴露不必要方法 -
allow_headers:至少包含"Content-Type"和"Authorization";若前端用自定义头(如X-Request-ID),也得加进去
中间件注册顺序影响 CORS 头是否生效
CORSMiddleware 必须在路由注册之后、其他业务中间件之前添加,否则它可能看不到最终响应头。
- 正确顺序:
app = FastAPI()→ 注册路由 →app.add_middleware(CORSMiddleware, ...) - 错误做法:把
CORSMiddleware放在日志中间件或鉴权中间件之后 → 它的响应头可能被覆盖或未写入 - 验证方式:用
curl -I http://localhost:8000/any-path查看响应头是否有Access-Control-Allow-Origin
最容易被忽略的是:预检请求不走你的业务路由逻辑,它由中间件直接响应,所以即使你写了 @app.options("/api/login") 也没用——CORSMiddleware 已经接管了所有 OPTIONS。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










