Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

468
Vistas
Siga recibiendo "307 Redirección temporal" antes de devolver el estado 200 alojado en la aplicación FastAPI + uvicorn + Docker: ¿cómo devolver el estado 200?

Editar:

Encontré el problema, pero no estoy seguro de por qué sucede esto. Cada vez que consulto: http://localhost:4001/hello/ con el " / " al final, obtengo una respuesta de estado 200 adecuada. No entiendo porque.

Publicación original:

Cada vez que envío una consulta a mi aplicación, sigo recibiendo una redirección 307. Cómo hacer que mi aplicación devuelva el estado normal 200 en lugar de redirigirla a través de 307

Esta es la salida de la solicitud:

 abm | INFO: 172.18.0.1:46476 - "POST /hello HTTP/1.1" 307 Temporary Redirect abm | returns the apples data. nothing special here. abm | INFO: 172.18.0.1:46480 - "POST /hello/ HTTP/1.1" 200 OK

pytest devuelve:

 E assert 307 == 200 E + where 307 = <Response [307]>.status_code test_main.py:24: AssertionError

en mi directorio raíz: /__init__.py archivo:

 from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware # from .configs import cors from .subapp import router_hello from .potato import router_potato from .apple import router_apple abm = FastAPI( title = "ABM" ) # potato.add_middleware(cors) abm.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) abm.include_router(router_hello.router) abm.include_router(router_potato.router) abm.include_router(router_apple.router) @abm.post("/test", status_code = 200) def test(): print('test') return 'test'

Archivo /subapp/router_hello.py :

 router = APIRouter( prefix='/hello', tags=['hello'], ) @router.post("/", status_code = 200) def hello(req: helloBase, apple: appleHeader = Depends(set_apple_header), db: Session = Depends(get_db)) -> helloResponse: db_apple = apple_create(apple, db, req.name) if db_apple: return set_hello_res(db_apple.potato.api, db_apple.name, 1) else: return "null"

en /Dockerfile :

 CMD ["uvicorn", "abm:abm", "--reload", "--proxy-headers", "--host", "0.0.0.0", "--port", "4001", "--forwarded-allow-ips", "*", "--log-level", "debug"]

Probé con y sin "--forwarded-allow-ips", "*" .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Ocurre porque la ruta exacta definida por usted para su vista es yourdomainname/hello/ , por lo que cuando lo presiona sin / al final, primero intenta llegar a esa ruta, pero como no está disponible, vuelve a verificar después de agregar / y da un status code 307 y luego, cuando encuentra la ruta real, devuelve el código de estado que se define en la function/view vinculada con esa ruta, es decir status code 200 en su caso.

También puede leer más sobre el problema aquí: https://github.com/tiangolo/fastapi/issues/2060#issuecomment-834868906

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda