跳到内容

响应头

使用 Response 参数

您可以在您的路径操作函数中声明一个类型为 Response 的参数(就像您可以为 cookie 所做的那样)。

然后,您可以在该临时响应对象中设置头信息。

from fastapi import FastAPI, Response

app = FastAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}

然后你可以像往常一样返回任何你需要的对象(一个 dict、一个数据库模型等)。

如果你声明了一个 response_model,它仍然会被用来过滤和转换你返回的对象。

FastAPI 将使用该临时响应来提取头信息(以及 cookie 和状态码),并将它们放入包含您返回的值的最终响应中,该响应会经过 response_model 的过滤。

您也可以在依赖项中声明 Response 参数,并在其中设置头信息(和 cookie)。

直接返回 Response

当您直接返回 Response 时,也可以添加头信息。

按照 直接返回 Response 中的描述创建一个响应,并将头信息作为附加参数传递。

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/headers/")
def get_headers():
    content = {"message": "Hello World"}
    headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
    return JSONResponse(content=content, headers=headers)

技术细节

您也可以使用 from starlette.responses import Responsefrom starlette.responses import JSONResponse

FastAPI 提供与 fastapi.responses 相同的 starlette.responses 只是为了方便开发者。但大多数可用的响应直接来自 Starlette。

由于 Response 经常用于设置头信息和 cookie,FastAPI 也将其提供了 fastapi.Response

自定义头

请记住,可以通过使用 X- 前缀来添加自定义专有头。

但是,如果您有希望浏览器中的客户端能够看到的自定义头,您需要将它们添加到您的 CORS 配置中(在 CORS (跨域资源共享) 中了解更多),使用 Starlette 的 CORS 文档 中记录的 expose_headers 参数。