当前位置: 首页 > news >正文

FastAPI 请求头与 Cookie

FastAPI 请求头与 Cookie 学习笔记

一、请求头(Headers)

1. 基本用法 —Header

fromfastapiimportFastAPI,Header app=FastAPI()@app.get("/items/")asyncdefread_items(user_agent:str=Header(None)):return{"User-Agent":user_agent}
  • 使用Header()从请求头中提取值,注入到路径操作函数的参数中。
  • 默认值设为None表示该请求头可选。

2. 自动转换规则

HTTP 请求头写法Python 参数写法说明
User-Agentuser_agent连字符-自动转为下划线_
X-Tokenx_token参数名自动小写

FastAPI 内部会做以下转换:

  • 连字符-→ 下划线_:因为 Python 变量名不能包含-
  • 大小写不敏感:HTTP 头本身不区分大小写,Python 参数名用小写即可

3. 禁用下划线转换 —convert_underscores

如果请求头本身包含下划线(如X_API_KEY),需要禁用自动转换:

@app.get("/items/")asyncdefread_items(x_api_key:str=Header(None,convert_underscores=False)):return{"X_API_KEY":x_api_key}

注意:HTTP 规范建议头名称中使用连字符而非下划线,某些代理(如 Nginx)默认会丢弃含下划线的请求头。

4. 重复请求头 —list类型

当同一请求头出现多次时,用list接收:

@app.get("/items/")asyncdefread_items(x_token:list[str]=Header(None)):return{"X-Token":x_token}# 请求: X-Token: foo X-Token: bar# 响应: {"X-Token": ["foo", "bar"]}

二、Cookie

1. 基本用法 —Cookie

fromfastapiimportFastAPI,Cookie app=FastAPI()@app.get("/items/")asyncdefread_items(ads_id:str=Cookie(None)):return{"ads_id":ads_id}
  • 使用Cookie()从请求的 Cookie 中提取指定名称的值。
  • 参数名即为 Cookie 的 key。

2. 与 Header 的对比

特性Header()Cookie()
数据来源HTTP 请求头请求头中的Cookie字段
名称转换-_,自动小写无转换,参数名即 Cookie 名
典型场景Token、User-Agent 等会话 ID、用户偏好等

三、底层机制

HeaderCookiePathQuery本质上都是Param的子类,共享相同的配置项:

Param (基类) ├── Path() — 路径参数 ├── Query() — 查询参数 ├── Header() — 请求头 ├── Cookie() — Cookie └── Body() — 请求体

通用参数:

参数说明
default默认值,None表示可选
alias别名,用于映射不同的名称
title/descriptionOpenAPI 文档中的标题/描述
gt/ge/lt/le数值约束(仅数值类型)
min_length/max_length字符串长度约束
regex正则校验

四、完整示例

fromfastapiimportFastAPI,Header,Cookie app=FastAPI()@app.get("/demo/")asyncdefdemo(# 请求头user_agent:str=Header(None,description="客户端标识"),x_request_id:str=Header(None,alias="X-Request-ID"),accept:list[str]=Header(None),# Cookiesession_id:str=Cookie(None,description="会话ID"),lang:str=Cookie("zh-CN",description="语言偏好"),):return{"user_agent":user_agent,"x_request_id":x_request_id,"accept":accept,"session_id":session_id,"lang":lang,}

测试请求

curl-XGET"http://127.0.0.1:8000/demo/"\-H"X-Request-ID: abc-123"\-H"Accept: application/json"\-H"Accept: text/html"\-H"Cookie: session_id=sess_xyz; lang=en-US"

响应

{"user_agent":"curl/7.88.1","x_request_id":"abc-123","accept":["application/json","text/html"],"session_id":"sess_xyz","lang":"en-US"}

五、注意事项

  1. 安全性:请求头和 Cookie 可被客户端伪造,敏感操作必须结合服务端校验(如签名、JWT 验证)。
  2. Nginx 下划线问题:Nginx 默认丢弃含_的请求头,需配置underscores_in_headers on;
  3. Cookie 大小限制:单个 Cookie 通常不超过 4KB,大量数据应存服务端。
  4. HttpOnly / Secure:设置 Cookie 时建议通过Response对象添加安全属性:
fromfastapiimportResponse@app.post("/login")asyncdeflogin(response:Response):response.set_cookie(key="session_id",value="sess_xyz",httponly=True,# 禁止 JS 访问,防 XSSsecure=True,# 仅 HTTPS 传输samesite="lax",# 防 CSRFmax_age=3600,)return{"msg":"logged in"}
  1. Pydantic 模型方式:也可以用Header/Cookie配合 Pydantic 模型做批量校验,但更常见的做法是逐参数声明。
http://www.jsqmd.com/news/773969/

相关文章:

  • 优化堆排序
  • Win11 环境下,自定义安装目录部署 Claude Code 调用Xiaomi MIMO大模型
  • 终极Windows风扇控制解决方案:Fan Control深度解析与实战应用
  • 抖音批量下载器架构解析:企业级内容获取解决方案
  • OpenClaw监控告警技能:为AI Agent构建轻量级自动化哨兵系统
  • AI开发环境自动化配置:从Conda依赖管理到Docker容器化实践
  • 2026成都GEO全域搜索优化机构TOP5权威榜单,本土技术派强势领跑
  • FastAPI 错误处理
  • AISMM模型不再只是评估工具:SITS2026首次定义“动态治理引擎”架构,3类企业已启动预迁移验证
  • 为AI编程助手制定规则手册:提升代码生成质量与团队协作效率
  • YOLO 系列:小目标检测又一力作:YOLOv10 颈部引入 RepGFPN,重参数化高效融合
  • 一句话配置你的物联网平台
  • 从零到一:基于深度学习的实时头部追踪技术全解析
  • 5分钟掌握Windows右键菜单管理:让右键操作重回高效简洁
  • MUI Select组件:自定义弹出菜单位置
  • 【2026奇点智能技术大会权威解码】:AISMM改进路线图的5大颠覆性演进与企业落地时间窗
  • Cursor AI 代码编辑器实战:从交互模式到工作流重塑的开发者指南
  • 类和对象4
  • 山东大学软件学院项目实训团队博客:基于AI大模型的智能考研助手(二)
  • UI-TARS桌面版:重构GUI自动化前沿的技术革命与智能自动化创新架构
  • AutoRaise深度解析:如何让macOS窗口自动聚焦提升工作效率
  • AISMM基准数据首次全球统一发布(SITS2026核心机密解封)
  • 基于FastAPI+Vue3的AI对话机器人框架Openaibot实战指南
  • MATLAB读取高光谱图像
  • C++BFS广度优先搜索全解
  • MetaGPT 论文精读:ICLR 2024 Oral,角色化流水线式多Agent协作
  • 不花一分钱,年省200块18小时,2026年ipad录音转文字高ROI工具冷静评测
  • 企业布局 GEO 项目的 5 大优势|抢占 AI 流量入口,构建长效增长壁垒
  • Ubuntu 22.04 在 CloudCone 上安装 Docker 报错 gpg 密钥失效怎么办?
  • AI代理氛围感设计:从情感化交互到工程化实现