응답 헤더

응답 헤더 (Response Headers)

응답에 헤더를 설정하는 두 가지 방법을 살펴볼게요. Response 파라미터로 설정하는 법과, Response를 직접 돌려주며 설정하는 법이에요.

출처: 공식문서

Response 파라미터 사용하기

_path operation 함수_에 Response 타입의 파라미터를 선언할 수 있어요(쿠키에서 하듯이).

그리고 그 임시 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"}

그리고 평소처럼 필요한 객체(dict, 데이터베이스 모델 등)를 돌려주면 됩니다.

response_model을 선언했다면, 여전히 돌려준 객체를 필터링하고 변환하는 데 사용돼요.

FastAPI는 그 임시 response에서 헤더(쿠키와 상태 코드도 함께)를 추출해서, 여러분이 돌려준 값을 담고 어떤 response_model로 필터링된 최종 response에 넣습니다.

의존성에서도 Response 파라미터를 선언하고 그 안에서 헤더(와 쿠키)를 설정할 수 있어요.

Response를 직접 돌려주기

Response를 직접 돌려줄 때도 헤더를 추가할 수 있어요.

Response Directly 돌려주기에 설명된 대로 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는 개발자인 여러분의 편의를 위해 starlette.responses와 같은 것을 fastapi.responses로 제공하지만, 사용 가능한 response 대부분은 Starlette에서 직접 옵니다. 그리고 Response는 헤더와 쿠키를 설정할 때 자주 쓰이기 때문에, FastAPI는 그것도 fastapi.Response로 제공해요.

커스텀 헤더 (Custom Headers)

커스텀 전용 헤더는 X- 접두사로 추가할 수 있다는 점을 기억하세요.

그런데 브라우저의 클라이언트가 볼 수 있어야 하는 커스텀 헤더가 있다면, CORS (Cross-Origin Resource Sharing)에 설명된 대로 expose_headers 파라미터를 사용해 CORS 설정에 추가해야 해요. 이 파라미터는 Starlette의 CORS 문서에 문서화되어 있습니다.

더 알아보기 (Learn more)