在FastAPI中设置响应头有多种方式,具体取决于需求和场景。以下是详细说明:

admin7个月前花开月下机器人143


1. ‌直接在返回值中设置响应头(推荐)‌

适用场景‌:简单响应,无需自定义响应类。

示例代码‌:

python

Copy Code

from fastapi import FastAPI, Response


app = FastAPI()


@app.get("/custom-header")

async def custom_header(response: Response):

    response.headers["X-Custom-Header"] = "Custom Value"

    return {"message": "Check the headers"}


说明‌:通过在视图函数中直接操作response.headers字典,添加自定义头。FastAPI会自动处理响应体和状态码。

2. ‌使用Response类显式控制‌

适用场景‌:需要完全控制响应格式(如状态码、内容类型)。

示例代码‌:

python

Copy Code

from fastapi import FastAPI, Response


app = FastAPI()


@app.get("/custom-response")

async def custom_response():

    content = '{"message": "Hello World"}'

    headers = {"X-Custom-Header": "custom-value"}

    return Response(

        content=content,

        media_type="application/json",

        headers=headers,

        status_code=201

    )


说明‌:通过Response类显式设置content、headers和status_code,适用于需要自定义响应格式的场景。

3. ‌使用JSONResponse简化JSON响应‌

适用场景‌:返回JSON数据时,自动处理序列化。

示例代码‌:

python

Copy Code

from fastapi import FastAPI

from fastapi.responses import JSONResponse


app = FastAPI()


@app.get("/json-response")

async def json_response():

    return JSONResponse(

        content={"message": "Hello World"},

        status_code=201,

        headers={"X-Custom-Header": "custom-value"}

    )


说明‌:JSONResponse是Response的子类,专门用于JSON响应,简化了序列化过程。

4. ‌全局错误处理中添加响应头‌

适用场景‌:自定义错误响应时添加额外头信息。

示例代码‌:

python

Copy Code

from fastapi import FastAPI, Request, HTTPException

from fastapi.responses import JSONResponse


app = FastAPI()


@app.exception_handler(HTTPException)

async def unicorn_exception_handler(request: Request, exc: HTTPException):

    return JSONResponse(

        status_code=exc.status_code,

        content={"message": exc.detail},

        headers={"X-Custom-Header": "Error-Info"}

    )


说明‌:在异常处理器中通过JSONResponse的headers参数添加自定义头。

5. ‌注意事项‌

大小写敏感性‌:HTTP头是大小写不敏感的,但FastAPI默认将下划线转换为连字符(如x_custom_header → x-custom-header)。若需保留下划线,可设置convert_underscores=False。

重复头处理‌:若需处理重复头(如X-Custom-Header有多个值),可使用List[str]类型声明:

python

Copy Code

from fastapi import FastAPI, Header

from typing import List


app = FastAPI()


@app.get("/multi-headers")

async def multi_headers(x_custom_header: List[str] = Header(None)):

    return {"headers": x_custom_header}


总结


FastAPI通过多种方式灵活设置响应头,推荐优先使用直接操作response.headers的方式,结合Response或JSONResponse类可实现更精细控制。


澳五机器人 澳八机器人 河内机器人 加拿大机器人 花开月下机器人 朱雀机器人 速飞机器人 名爵机器人 飞天机器人 BV机器人 涂六飞单机器人 美猴王机器人 大富豪机器人 速讯机器人 五球助手 十球助手

相关文章

花开月下机器人 Agent 从上手到精通:打造有记忆的个人智能体

当下AI Agent的落地门槛早已大幅降低,但绝大多数人搭建的个人智能体都停留在“单次对话问答”的初级阶段:聊过的内容转头就忘,上次你告诉它的偏好下次对话完全不记得,更谈不上主动帮你处理长期任务。想要...

花开月下机器人 三类核心智能指针40秒上手

核心原理10秒速懂智能指针的本质是基于RAII机制的栈对象,把堆内存的生命周期完全绑定到栈对象的自动销毁流程上,不用手动写delete,哪怕程序中途抛异常也不会出现内存泄漏。所有智能指针都定义在<...

Claude Code 使用指南:AI编程的终端革命

引言:AI编程的新范式在人工智能技术飞速发展的2026年,AI编程助手已经从简单的代码补全工具进化为能够自主执行复杂任务的智能代理。Claude Code作为Anthropic公司推出的终端原生AI编...

[大模型实战 05] 大模型实战的杀手锏:模型微调

在人工智能技术飞速发展的今天,大模型已成为驱动智能应用的核心引擎。然而,通用大模型在面对垂直领域任务时,常因“水土不服”而表现平平——其输出可能偏离业务规范,或无法捕捉行业特有的语义逻辑。‌模型微调(...

花开月下机器人 时长偏差本质上是一种混淆偏差(Confounding Bias)

一、论文核心背景与问题提出在视频推荐系统中,观看时长是衡量用户满意度和视频质量的关键指标,精准预测用户对视频的观看时长能够显著提升推荐效果与用户体验。然而,当前主流的观看时长预测模型普遍存在**时长偏...

未命名

一、近期SSH密钥过期问题复盘自上次发布SSH密钥过期问题预警以来,团队内又陆续出现3起密钥过期事件,均发生在AI模型训练的关键节点。其中,算法组一名成员在进行大规模预训练模型调参时,因SSH密钥过期...