You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI无法从Header参数获取数据,请求协助排查问题

排查FastAPI Header参数无法获取的问题

从最容易踩坑的点逐一排查:

  • 请求头命名匹配问题
    FastAPI会自动将函数参数的下划线格式转换成HTTP请求头的连字符格式,比如你代码里的x_token,对应的请求头应该是X-Token(首字母大写,下划线转连字符)。别在Postman/Insomnia里填成x_token或者X_token,这都匹配不上。

  • 修正代码里的语法错误
    你试的另外两种写法本身存在语法问题:

    • 第二种少了右括号:def testing_header(x_token: str = Header(): 应补全为def testing_header(x_token: str = Header(default=None)):
    • 第三种把default拼写成了defalt,会导致参数默认值无法正确设置,直接引发报错。
      正确的基础写法可以用你最开始的Annotated版本(Python<3.9需提前安装typing-extensions),或者简化版:
    from fastapi import FastAPI, Header
    
    app = FastAPI()
    
    @app.get('/hello')
    def testing_header(x_token: str | None = Header(default=None)):
        return {'header': x_token}
    
  • 验证请求工具的头是否正确添加
    在Postman/Insomnia的Headers标签下,新增一条配置:

    • Key: X-Token
    • Value: 任意测试值(比如test123)
      发送GET请求到http://localhost:8000/hello,查看返回结果是否能拿到填入的测试值。
  • 用FastAPI自带文档测试
    启动服务后访问http://localhost:8000/docs,找到/hello接口点击"Try it out",在Request Headers栏填写X-Token的值后发送请求。如果这里能正常返回值,说明是测试工具操作有误;如果仍无效,再检查代码和环境。

  • 检查FastAPI版本与依赖
    若使用旧版FastAPI(<0.95.0),Annotated写法需要额外安装typing-extensions包,可执行pip install typing-extensions尝试解决。也可以直接用旧版兼容写法:

    def testing_header(x_token: str = Header(None)):
    
  • 排查中间件影响
    如果你添加了CORS中间件或自定义中间件,检查是否存在修改、过滤请求头的逻辑,比如部分中间件会移除非标准头,导致X-Token被拦截。

内容的提问来源于stack exchange,提问作者Alojarf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:52:52