为什么在 fastAPI 中使用 ORJSONResponse() 时 Http headers 消失了?

Why Http headers is being vanished when using ORJSONResponse() in fastAPI?

Httpheaders可以在fastAPI修改;但是,当我尝试使用更快的序列化程序(在本例中为 ORJSONResponse)以获得更快的响应时,所有添加或修改的 header 都令人困惑地消失了。 我不知道为什么会这样,我该如何解决? UJSONResponse 我们也得到了相同的结果。

感谢分享您的经验。

一个。此代码无法修改 headers

from fastapi import APIRouter, Response
from fastapi.responses import ORJSONResponse
router = APIRouter()

@router.get("/test")
async def plan_list(response:Response):
    response.headers["test-header"]="test-value"
    return ORJSONResponse(list(range(10000)))

输出header代码列表A:

date: Thu, 22 Oct 2020 18:42:19 GMT
server: uvicorn
content-length: 48891
content-type: application/json

乙。此代码正常修改 headers

from fastapi import APIRouter, Response
from fastapi.responses import ORJSONResponse
router = APIRouter()

@router.get("/test")
async def plan_list(response:Response):
    response.headers["test-header"]="test-value"
    return list(range(10000))

输出header代码列表B:

date: Thu, 22 Oct 2020 18:42:19 GMT
server: uvicorn
content-length: 48891
content-type: application/json
test-header: test-value

测试平台:

我认为你应该像这样使用 Response

return Response(list(range(10000)))

已解决here thanks to amin jamal


from fastapi import APIRouter, Response, FastAPI
from fastapi.responses import ORJSONResponse

app = FastAPI()
router = APIRouter()


@router.get("/test")
async def plan_list(response:Response):
       response.headers["test"]="test-value"
       return ORJSONResponse(list(range(10000)),headers=response.headers)



app.include_router(router)