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

admin5个月前花开月下机器人90


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机器人 涂六飞单机器人 美猴王机器人 大富豪机器人 速讯机器人 五球助手 十球助手

相关文章

WSO2 4.5升级到4.6:数据表更新全解析

在企业级中间件领域,WSO2以其开源、灵活的特性备受青睐。随着WSO2从4.5版本升级到4.6版本,为了适配新功能、优化性能和提升安全性,部分数据表需要进行相应更新。本文将详细梳理升级过程中涉及的数据...

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

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

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

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

在PySide6/PyQt6的项目中实现样式切换处理(二)

一、引言与前期回顾在PySide6/PyQt6项目开发中,样式切换功能作为提升用户体验的关键特性,其重要性日益凸显。在系列文章的第一部分中,我们探讨了样式切换的基础概念、核心实现方案以及样式资源的组织...

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

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

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

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