응답 헤더
응답 헤더 (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 Response나from 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 문서에 문서화되어 있습니다.