Saltar al contenido

Headers de Respuesta

Usar un parámetro Response

Puedes declarar un parámetro de tipo Response en tu función de operación de ruta (como puedes hacer para cookies).

Y luego puedes establecer headers en ese objeto de respuesta temporal.

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

Y luego puedes devolver cualquier objeto que necesites, como lo harías normalmente (un dict, un modelo de base de datos, etc).

Y si declaraste un response_model, este se seguirá usando para filtrar y convertir el objeto que devolviste.

FastAPI usará esa respuesta temporal para extraer los headers (también cookies y código de estado), y los pondrá en la respuesta final que contiene el valor que devolviste, filtrado por cualquier response_model.

También puedes declarar el parámetro Response en dependencias, y establecer headers (y cookies) en ellas.

Devolver una Response directamente

También puedes añadir headers cuando devuelves una Response directamente.

Crea una respuesta como se describe en Devolver una Response Directamente y pasa los headers como un parámetro adicional:

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)

Detalles Técnicos

También podrías usar from starlette.responses import Response o from starlette.responses import JSONResponse.

FastAPI proporciona las mismas starlette.responses que fastapi.responses solo como una conveniencia para ti, el desarrollador. Pero la mayoría de las respuestas disponibles vienen directamente de Starlette.

Y como el Response se puede usar frecuentemente para establecer headers y cookies, FastAPI también lo proporciona en fastapi.Response.

Headers Personalizados

Ten en cuenta que los headers propietarios personalizados se pueden añadir usando el prefijo X-.

Pero si tienes headers personalizados que quieres que un cliente en un navegador pueda ver, necesitas añadirlos a tus configuraciones de CORS (lee más en CORS (Cross-Origin Resource Sharing)), usando el parámetro expose_headers documentado en la documentación de CORS de Starlette.