Nos encontramos con un problema cuando llamamos a un punto final y se produce una redirección debido a que falta una barra diagonal. Como puede ver en la imagen a continuación, cuando se realiza una solicitud a https ://.../notifications, el servidor FastAPI responde con una redirección a http ://...notifications/
Sospecho que es un problema de configuración de la aplicación en lugar de un problema de configuración del servidor. ¿Alguien tiene una idea de cómo resolver este problema?
Esto se debe a que su aplicación no confía en los encabezados del proxy inverso que anulan el esquema (el encabezado X-Forwarded-Proto que se pasa cuando maneja una solicitud TLS).
Hay algunas maneras en que podemos arreglar eso:
Si está ejecutando la aplicación directamente desde el servidor uvicorn , intente usar el indicador --forwarded-allow-ips '*' .
Si está ejecutando gunicorn , también puede establecer la bandera --forwarded-allow-ips="*" .
En cualquiera de las aplicaciones, también puede utilizar la variable de entorno FORWARDED_ALLOW_IPS .
Importante: el * debe usarse solo como prueba, ya que hará que su aplicación confíe en los encabezados X-Forwarded-* de cualquier fuente. Le sugiero que lea los documentos de uvicorn y los documentos de gunicorn para obtener un conocimiento más profundo de qué configurar en esta bandera y por qué.
Experimenté este problema al usar FastAPI con react-admin.
Una solución es cambiar la aplicación FastAPI para que no realice redireccionamientos, sino que trate ambas direcciones URL como puntos finales de API válidos (con y sin barra inclinada).
Puede usar este fragmento escrito por malthunayan para cambiar el comportamiento de APIRouter :
from typing import Any, Callable from fastapi import APIRouter as FastAPIRouter from fastapi.types import DecoratedCallable class APIRouter(FastAPIRouter): def api_route( self, path: str, *, include_in_schema: bool = True, **kwargs: Any ) -> Callable[[DecoratedCallable], DecoratedCallable]: if path.endswith("/"): path = path[:-1] add_path = super().api_route( path, include_in_schema=include_in_schema, **kwargs ) alternate_path = path + "/" add_alternate_path = super().api_route( alternate_path, include_in_schema=False, **kwargs ) def decorator(func: DecoratedCallable) -> DecoratedCallable: add_alternate_path(func) return add_path(func) return decoratorfuente: https://github.com/tiangolo/fastapi/issues/2060#issuecomment-834868906
(también puede ver otras soluciones similares en este problema de GitHub)
Otra solución es agregar:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> al archivo index.html en la interfaz. Actualizará todas las solicitudes de http a https (también cuando se ejecute localmente, por lo que puede que no sea la mejor solución)