1. 基础用法
1 | from fastapi import FastAPI, Request |
- 使用
@app.middleware("http")装饰器声明HTTP中间件 - 中间件函数接收
Request对象和call_next回调函数参数 - 请求处理流程:
graph TD A[客户端请求] --> B[中间件预处理] B --> C[执行路由处理函数] C --> D[中间件后处理] D --> E[返回响应]
- 典型应用场景:请求日志、响应头修改、性能监控
2. 中间件执行流程
1 |
|
- 执行顺序遵循洋葱模型:中间件注册顺序与执行顺序相反
- 输出示例:
1
2
3
4中间件2预处理
中间件1预处理
中间件1后处理
中间件2后处理 - 可通过
app.add_middleware()显式控制中间件顺序
3. 常用内置中间件
3.1 CORSMiddleware
1 | from fastapi.middleware.cors import CORSMiddleware |
- 解决跨域请求问题
- 核心参数:
allow_origins: 允许的源列表allow_credentials: 是否允许携带凭证allow_methods: 允许的HTTP方法
3.2 GZipMiddleware
1 | from fastapi.middleware.gzip import GZipMiddleware |
- 自动压缩响应数据
minimum_size参数控制最小压缩阈值- 支持文本类型(JSON/HTML/CSS/JS)压缩
4. 生产环境最佳实践
- 异常处理:通过中间件统一捕获未处理异常
- 速率限制:结合Redis实现API调用频率控制
- 请求验证:拦截非法请求(如黑名单IP)
- 日志审计:记录完整请求信息(IP/UA/路径)
- 性能优化:使用
X-Process-Time响应头监控接口耗时
测试命令示例:
1 curl -X GET http://localhost:8000/items/42