Los enlaces FastAPI creados por url_for en la plantilla Jinja2 utilizan HTTP en lugar de HTTPS.
Migré una aplicación en Flask servida por waitress a FastAPI servida por uvicorn, pero no puedo forzar los enlaces (generados por url_for dentro del archivo index.html de la plantilla) a utilizar HTTPS en lugar de HTTP.
Con waitress, usaba:
from waitress import serve
import flask_app
PORT=5000
HOST_IP_ADDRESS='0.0.0.0'
serve(flask_app.app, host=HOST_IP_ADDRESS, port=PORT, url_scheme="https")
Con uvicorn, intenté usar proxy_headers, pero eso no funcionó. Utilicé un método alternativo en el archivo index.html:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Esto cargó correctamente el style.css desde los archivos estáticos, pero los enlaces a otro punto final aún utilizan HTTP.
¿Existe una manera sencilla de forzar que todos los enlaces creados por url_for utilicen HTTPS?
davy.ai
Sí, existe una forma fácil de forzar que todos los enlaces creados por url_for utilicen HTTPS. En la instancia de la aplicación FastAPI, puedes configurar la variable de entorno
FORCE_HTTPS=True
para que todos los URLs generados utilicen HTTPS. Alternativamente, puedes pasarurl_scheme='https'
a la instancia de la aplicación FastAPI como parámetro. Ambos enfoques deberían garantizar que todos los enlaces generados por url_for utilicen HTTPS.