308

Permanent Redirect

El 301 pero respetando métodos HTTP. Redirecciones permanentes sin cambiar POST a GET.

🔗 Redirection

📋 ¿Qué narices es esto?

El código 308 Permanent Redirect es el "se mudó para siempre, pero síguelo haciendo igual" de HTTP. Es la versión moderna y precisa del 301, diseñada para mantener el método HTTP original en redirecciones permanentes. Como el servicio postal que no solo te dice "se mudó a esta dirección", sino también "y sigue enviando cartas del mismo tipo que mandabas antes".

La diferencia clave es que el 308 preserva el método HTTP original para siempre. Si tu API se muda permanentemente de /api/v1/users a /api/v2/users, un POST seguirá siendo POST, un PUT seguirá siendo PUT. El 301 clásico era ambiguo y muchos navegadores convertían automáticamente POST a GET. El 308 dice "usa la nueva dirección para siempre, pero haz exactamente lo mismo que hacías".

El 308 aparece típicamente en:

  • APIs que cambian de versión permanentemente
  • Migración de endpoints RESTful
  • Cambios de dominio manteniendo funcionalidad
  • Reestructuración de rutas en aplicaciones
  • Consolidación de servicios web

🎯 Dato curioso

El 308 es relativamente nuevo (RFC 7538, 2015) comparado con otros códigos. Se creó específicamente para solucionar las inconsistencias del 301 con métodos no-GET. Es HTTP aprendiendo de sus errores históricos.

La belleza del 308 es su claridad semántica. No hay ambigüedad: el recurso se movió permanentemente Y el método HTTP se mantiene. Los navegadores y herramientas pueden actualizar sus marcadores/cache con confianza. Es la diferencia entre "mudanza con instrucciones vagas" y "mudanza con manual de usuario incluido". Perfecto para APIs modernas donde cada método HTTP tiene significado específico.

🔧 Cómo implementar esto

🖥️ Para servidores (migración permanente)

  1. Identifica cambio permanente: Endpoint, dominio o estructura que no volverá.
  2. Responde 308 + Location: Apunta a la nueva ubicación definitiva.
  3. Preserva método HTTP: POST sigue siendo POST, PUT sigue siendo PUT.
  4. Configura caching agresivo: Es permanente, puede cachearse mucho tiempo.
  5. Cliente actualiza referencias: Para futuras peticiones directas.

📱 Para desarrolladores frontend

  1. Actualiza URLs base: Cuando recibas 308, cambia configuración.
  2. Maneja automáticamente: Los navegadores siguen la redirección.
  3. Guarda nueva ubicación: Para evitar redirecciones futuras.
  4. Testea todos los métodos: POST, PUT, DELETE, PATCH.
  5. Considera SEO: Para páginas web, funciona como 301.

Problemas típicos con 308

  • Olvidar el header Location:
    Sin el header Location, el cliente no sabe a dónde redirigir. Es obligatorio en 308.
  • Redirecciones en bucle:
    Si la URL de destino vuelve a devolver 308, puedes crear un bucle infinito. Revisa la lógica de tus redirecciones.
  • Confusión con 301:
    Algunos desarrolladores siguen usando 301 para migraciones permanentes, pero solo el 308 garantiza que el método HTTP no cambia.
  • No controlar el cache:
    Sin Cache-Control, los clientes pueden repetir la petición más veces de lo necesario. Usa max-age para limitarlo.

🚀 Respuesta rápida para emergencias

🔥 Si el navegador o cliente no redirige:
1. Comprueba que el header Location está presente y correcto.
2. Verifica que el código de estado es 308.
3. Testea con diferentes métodos HTTP.
⚡ Si hay bucles de redirección:
1. Revisa la lógica de tus reglas de redirección.
2. Usa herramientas como redirect-checker.org.
3. Asegúrate de que la URL destino no devuelva otro 308.
🎯 Truco para APIs:
El 308 es ideal para APIs RESTful porque mantiene el método y el cuerpo de la petición. Úsalo siempre que quieras mover permanentemente un endpoint sin romper integraciones.