跳转至

响应头

使用 Response 参数

与声明 Cookie 响应一样,路径操作函数中还可以声明 Response 类型的参数。

现在,在临时响应对象中设置响应头。

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"}

接着,就可以像返回字典、数据库模型一样返回任意所需的对象。

仍可以使用声明的 response_model 筛选和转换返回的对象。

FastAPI 使用临时响应获取响应头(及 Cookie 与状态码),并把这些对象放入包含了 response_model 筛选过的返回值的最终响应。

依赖项中也可以声明 Response 参数,并设置响应头(和 Cookie)。

直接返回 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

FastAPIfastapi.responsesstarlette.responses 一样,只是为开发者提供的快捷方式,但其中绝大部分可用的响应都直接继承自 Starlette。

Response 常用于设置响应头与 Cookie,因此,FastAPI 也在 fastapi.Response 中提供了支持。

自定义响应头

注意,自定义专用响应头可以添加前缀 'X-'

但如果需要浏览器中的客户端查看自定义响应头,则要在 CORS 配置中(详见 CORS(跨域资源共享))使用 Starlette 官档 - CORS 中的 expose_headers 参数。