Saltar a 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 path (de manera similar como se hace con las cookies).

Y entonces, podrás configurar las cookies en ese objeto de response 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"}

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

Si declaraste un response_model, este se continuará usando para filtrar y convertir el objeto que devolviste.

FastAPI usará ese response temporal para extraer los headers (al igual que las cookies y el status code), además las pondrá en el response final que contendrá el valor retornado y filtrado por algún response_model.

También puedes declarar el parámetro Response en dependencias, así como configurar los headers (y las cookies) en ellas.

Retornar una Response directamente

Adicionalmente, puedes añadir headers cuando se retorne una Response directamente.

Crea un response tal como se describe en Retornar una respuesta 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 utilizar from starlette.responses import Response o from starlette.responses import JSONResponse.

FastAPI proporciona las mismas starlette.responses en fastapi.responses sólo que de una manera más conveniente para ti, el desarrollador. En otras palabras, muchas de las responses disponibles provienen directamente de Starlette.

Y como la Response puede ser usada frecuentemente para configurar headers y cookies, FastAPI también la provee en fastapi.Response.

Headers Personalizados

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

Si tienes headers personalizados y deseas que un cliente pueda verlos en el navegador, es necesario que los añadas a tus configuraciones de CORS (puedes leer más en CORS (Cross-Origin Resource Sharing)), usando el parámetro expose_headers documentado en Starlette's CORS docs.