Python中CORS 跨域中间件的配置和作用原理

一、先定位是什么:

CORS(Cross-Origin Resource Sharing)跨域资源共享,是由浏览器和服务端共同遵循的、规范跨域 HTTP 请求行为的安全机制

它的核心作用是在浏览器 "同源策略" 的安全框架下,允许服务端通过配置响应头明确声明 "哪些源(域名 + 端口)、哪些操作(方法 / 头信息)可以跨域访问自身资源",从而解决同源策略过于严格导致的合法业务跨域需求问题。

二、为什么?

就是因为浏览器本身有一个叫 同源策略 的安全机制:

当前端页面的协议、域名、端口与后端 API 的协议、域名、端口不一致时,浏览器会在接收后端响应后拦截数据;而 CORS(跨域资源共享)通过服务端配置响应头,让浏览器判定该跨域请求合法,从而放行响应数据,解决同源策略导致的跨域拦截问题。

三、怎么解决?

CORS 通过让服务器在 HTTP 响应头中注入标准化的 CORS 响应头来告诉浏览器:哪些源(Origin)哪些操作可以跨域访问资源

而不同语言配置 CORS 响应头的方法都不一样,java中是通过实现WebMvcConfigurer接口重写addCorsMappings方法来实现的。而我们的python则使用

跨域资源共享中间件:CORSMiddleware

它的的核心作用就是在HTTP响应中注入CORS相关头信息,让浏览器放行跨域请求。

python 复制代码
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# 配置允许跨域的源(生产环境替换为具体域名)
origins = [
    "http://localhost:3000",  # 前端本地开发地址
    "https://www.xxx.com",    # 生产环境前端域名
    "https://admin.xxx.com",  # 多域名支持
]

# 添加跨域中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,        # 允许的跨域源(列表形式,支持多个)
    allow_credentials=True,      # 是否允许携带 Cookie(关键,默认 False)
    allow_methods=["*"],         # 允许的请求方法(* 表示所有,如 GET/POST/PUT/DELETE)
    allow_headers=["*"],         # 允许的请求头(* 表示所有,如 Token/Content-Type)
    max_age=3600,                # 预检请求(OPTIONS)的缓存时间(秒),避免频繁预检
)

# 测试接口
@app.get("/api/test")
async def test_cors():
    return {"msg": "FastAPI 跨域请求成功"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1232 天前
2026年第38周GitHub趋势周报
python·科技·github