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

admin2天前花开月下机器人2


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类可实现更精细控制。


相关文章

大模型基础补全计划(一)——相关知识点回顾与Qwen3-VL-2B

引言:大模型时代的认知重构当GPT-4以接近人类水平的语言理解能力通过图灵测试时,我们正站在人工智能发展的历史性转折点。大模型技术不仅重塑了人机交互范式,更成为推动各行业智能化转型的核心引擎。本文作为...

生成AWR报告步骤

生成AWR报告是分析Oracle SGA性能的基础,主要通过SQL*Plus或PL/SQL Developer执行awrrpt.sql脚本完成。报告生成后,重点分析“Top 5 Time Events...

人工智能:一分钟将Gemini生成应用部署到本地计算机的保姆级教程(二)

人工智能:一分钟将Gemini生成应用部署到本地计算机的保姆级教程(二)引言:为何需要本地部署Gemini应用?在上一教程中,我们介绍了如何通过Gemini的API构建基础应用。但许多开发者面临一个关...

在 GeckoCIRCUITS 上开发新工具模块的方法(四)

在前三篇文章中,我们系统介绍了 GeckoCIRCUITS 模块开发的基础流程、实时控制实现、硬件接口集成及跨平台兼容性设计。 随着电力电子仿真需求的不断演进,开发者常面临更复杂的挑战,例如需要集成智...

【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real

引言 在人工智能与自动控制交叉领域,强化学习(Reinforcement Learning, RL)正成为解决复杂控制问题的关键技术。本文基于系统学习笔记,深入探讨强化学习的核心算法——策略...

使用 Vite + Lit 构建 WebComponent 组件(二)

在上一篇文章中,我们介绍了如何使用 Vite 和 Lit 创建一个简单的计数器组件,并深入探讨了 Lit 的核心机制。本文将在此基础上,进一步探索如何构建更复杂的 Web Component 组件,包...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。