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)
相关推荐
明月_清风13 分钟前
FastAPI 从入门到实战:3 分钟构建高性能异步 API
后端·python·fastapi
笨拙的老猴子18 分钟前
[特殊字符] Java GC机制详解:G1、ZGC、Shenandoah全面解析与版本演进对比
java·开发语言
bellus-19 分钟前
ubuntu26测试win10的ollama大模型性能
python
水木流年追梦21 分钟前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
JavaWeb学起来21 分钟前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
liuyunshengsir34 分钟前
PyTorch 动态量化(Dynamic Quantization)
人工智能·pytorch·python
电子云与长程纠缠43 分钟前
UE5制作六边形包裹球体效果
开发语言·python·ue5
砍材农夫1 小时前
物联网 基于netty构建mqtt协议规范(遗嘱与保留消息)
java·开发语言·物联网·netty
DFT计算杂谈1 小时前
KPROJ编译教程
java·前端·python·算法·conda
froginwe111 小时前
Python3 迭代器与生成器
开发语言