Saltar al contenido

Los códigos de estado

Las cinco familias, los códigos concretos que se preguntan una y otra vez, y la cabecera que acompaña a cada uno para que la respuesta sea útil.

Las cinco familias

Toda respuesta HTTP lleva un código de tres cifras. El primer dígito basta para saber qué ha pasado y, sobre todo, de quién es el problema si lo hay.

FamiliaNombreQué dice
1xxInformativosSe ha recibido la petición y el intercambio continúa
2xxÉxitoLa petición se ha recibido, entendido y aceptado
3xxRedireccionesHace falta una acción más, normalmente ir a otra dirección
4xxError del clienteLa petición está mal: sintaxis, permisos o recurso inexistente
5xxError del servidorLa petición era correcta pero el servidor no ha podido atenderla

La frontera que hay que tener clarísima está entre el 4 y el 5: en la familia 4xx la culpa es de quien pregunta, y en la 5xx de quien contesta.

Códigos de estado HTTP

1xx · informativo

  • 100 Continue
  • 101 Switching Protocols

2xx · éxito

  • 200 OK
  • 201 Created
  • 204 No Content

3xx · redirección

  • 301 permanente
  • 302 temporal
  • 304 no modificado

4xx · error del cliente

  • 400
  • 401 no autenticado
  • 403 prohibido
  • 404
  • 405
  • 429

5xx · error del servidor

  • 500
  • 502
  • 503 no disponible
  • 504 tiempo agotado

Para el examen

  • 1xx y 2xx: informativo y éxito

  • 3xx: redirección

  • 4xx: error del cliente

  • 5xx: error del servidor

Informativos y éxito: 1xx y 2xx

Los 1xx son provisionales: no cierran el intercambio. El 100 Continue le dice al cliente que puede seguir enviando el cuerpo, y el 101 Switching Protocols confirma un cambio de protocolo sobre la misma conexión, que es como arranca una conexión WebSocket.

CódigoNombreCuándo se devuelve
200OKEl caso normal: la petición ha ido bien y la respuesta lleva el resultado
201CreatedSe ha creado un recurso nuevo. Acompaña a un POST o a un PUT, y su dirección viaja en Location
202AcceptedLa petición se ha aceptado para procesarla más tarde, así que todavía no hay resultado que prometer. Típico de procesos por lotes
204No ContentTodo ha ido bien y no hay nada que devolver. Habitual tras un DELETE
206Partial ContentSe devuelve solo el fragmento pedido con la cabecera Range

Los códigos 204 y 206 se añaden aquí porque entran a examen con frecuencia. La confusión típica es entre 200 y 201: si la petición ha creado algo nuevo, lo correcto es 201 y no 200.

Para el examen

  • 200: correcto

  • 201: creado; el que responde a una creación

  • 204: correcto, sin contenido

Las redirecciones: 3xx

Salvo el 304, todos los 3xx llevan la cabecera Location con la nueva dirección, y el navegador la sigue sin preguntar. Lo que distingue a unos de otros es si el cambio es definitivo y si se conserva el método original.

CódigoNombreQué implica
301Moved PermanentlyEl recurso ha cambiado de dirección para siempre. El navegador y los buscadores actualizan el enlace
302FoundEl cambio es temporal: la próxima vez hay que volver a pedirlo en la dirección original
303See OtherEl resultado hay que recogerlo en otra dirección, siempre con GET
304Not ModifiedLa copia guardada sigue valiendo. No lleva cuerpo ni Location
307Temporary RedirectComo el 302, pero obliga a conservar el método y el cuerpo originales
308Permanent RedirectComo el 301, pero obliga a conservar el método y el cuerpo originales

301 permanente y 302 temporal. Y el 304 es el intruso de la familia: no redirige a ninguna parte, es la respuesta a una petición condicional.

Para el examen

  • 301 y 302: permanente y temporal

  • 304: no modificado; ni siquiera lleva cuerpo

  • 307 y 308: conservan el método original

Errores del cliente: 4xx

Es la familia más numerosa y la que más cae. Casi todos sus códigos tienen una cabecera asociada que convierte el error en algo accionable.

CódigoNombreQué ha ocurrido
400Bad RequestLa petición está mal formada y el servidor ni siquiera puede interpretarla
401UnauthorizedFalta autenticarse. El servidor no sabe quién es. Acompaña siempre a WWW-Authenticate
403ForbiddenSabe quién es y no le deja. Autenticarse otra vez no arregla nada
404Not FoundEl recurso no existe en esa dirección
405Method Not AllowedEl recurso existe pero no admite ese método. La respuesta enumera los válidos en la cabecera Allow
413Content Too LargeEl cuerpo enviado supera lo que el servidor acepta

El par 401 y 403 es la pregunta clásica y se resuelve con dos frases: el 401 dice «no sé quién eres», y el 403 dice «sé quién eres y aun así no puedes». Un ejemplo del 405 en esta plataforma: la dirección de un intento admite GET, pero si alguien intenta un POST contra ella el servidor responde 405 y devuelve Allow con los métodos que sí valen.

Para el examen

  • 401: no te has autenticado

  • 403: te conozco y aun así no puedes

  • 404 y 405: no existe y método no permitido

  • 429: demasiadas peticiones

Errores del servidor: 5xx

Aquí la petición era correcta y el fallo está del otro lado. Distinguirlos importa porque cada uno apunta a una pieza distinta de la infraestructura.

CódigoNombreDónde está el fallo
500Internal Server ErrorError genérico de la aplicación: algo ha reventado y no hay más detalle
502Bad GatewayEl servidor actuaba de pasarela y quien está detrás le ha respondido algo inválido
503Service UnavailableEl servicio no está disponible ahora mismo: sobrecarga o mantenimiento. Puede indicar cuándo volver con Retry-After
504Gateway TimeoutLa pasarela ha esperado al servidor de detrás y este no ha contestado a tiempo

502, 503 y 504 hablan de intermediarios y de disponibilidad, no del código de la aplicación. El que señala a la aplicación es el 500.

Para el examen

  • 500: error genérico

  • 502: pasarela incorrecta

  • 503: servicio no disponible: saturación o mantenimiento

  • 504: tiempo agotado en la pasarela