Saltar al contenido

Códigos de estado HTTP

Una respuesta HTTP comienza con un código de tres dígitos y una frase de razón breve. El primer dígito es el resumen completo: 1xx es provisional, 2xx tuvo éxito, 3xx apunta a otro lugar, 4xx culpa a la solicitud, 5xx culpa al servidor. Si recuerdas solo eso, puedes leer un registro que nunca has visto antes.

Las frases de razón aquí son las de los RFC, en inglés, porque es lo que viaja en el cable—un servidor envía "Not Found", no una traducción de ella, y una frase que buscas en un registro tiene que coincidir con los bytes que realmente se enviaron.

Las distinciones que causan problemas reales están dentro de las clases en lugar de entre ellas: 401 versus 403, 301 versus 308, y 502 versus 503 responden cada una una pregunta diferente sobre qué hacer a continuación, y cada una se usa rutinariamente para la otra.

1xx—Informativo

3

Provisional: la respuesta no es final e sigue otra.

CódigoFrase de razónQué significa
100ContinueEncabezados recibidos, sigue enviando el cuerpo.
101Switching ProtocolsCambio de protocolos—el apretón de manos de WebSocket.
103Early HintsSugerencias tempranas: precarga estos recursos mientras se prepara la respuesta real.

2xx—Éxito

5

La solicitud fue recibida, comprendida e aceptada.

CódigoFrase de razónQué significa
200OKÉxito, con un cuerpo.
201CreatedCreado.Debe llevar un encabezado Location apuntando al nuevo recurso.
202AcceptedAceptado para procesamiento, que aún no ha ocurrido.
204No ContentÉxito, e deliberadamente sin cuerpo.La respuesta correcta a un DELETE, o a un guardado que no tiene nada que devolver.
206Partial ContentContenido parcial—la respuesta a una solicitud de Range. Descargas reanudables.

3xx—Redirección

6

El recurso está en otro lugar, o tu copia en caché aún es buena.

CódigoFrase de razónQué significa
301Moved PermanentlyMovido permanentemente. Actualiza tus enlaces; los cachés pueden mantener esto por siempre.
302FoundEncontrado—una redirección temporal.Ampliamente implementado como cambiar el método a GET, que 307 arregla.
303See OtherVer otro: obtener el resultado con GET. La redirección después de un POST de formulario.
304Not ModifiedNo modificado—tu copia en caché es actual. Enviado sin cuerpo.
307Temporary RedirectRedirección temporal, método e cuerpo preservados.
308Permanent RedirectRedirección permanente, método e cuerpo preservados.

4xx—Error del cliente

14

La solicitud es el problema. Repetirla sin cambios fallará de nuevo.

CódigoFrase de razónQué significa
400Bad RequestEl servidor no pudo analizar la solicitud en absoluto.
401UnauthorizedNo autenticado—el servidor no sabe quién eres.Nombrado Unauthorized, pero significa no autenticado. Debe incluir WWW-Authenticate.
403ForbiddenAutenticado e aún no permitido. Mejores credenciales no ayudarán.
404Not FoundSin tal recurso, e el servidor no dirá si alguna vez lo hubo.
405Method Not AllowedMétodo incorrecto para esta URL.Debe listar los que funcionan en un encabezado Allow.
406Not AcceptableNada disponible en un formato que tu encabezado Accept aceptará.
409ConflictConflictos con el estado actual—una edición contra una versión antigua.
410GoneDesaparecido: existía e fue deliberadamente eliminado. Más fuerte que 404.
413Content Too LargeEl cuerpo es más grande que lo que el servidor acepta.
415Unsupported Media TypeEl servidor no maneja este Content-Type.
418I'm a teapotSoy una tetera. Una broma del April Fools' de 1998, permanentemente reservada.
422Unprocessable ContentAnalizado correctamente, contenidos inválidos—un campo faltante, un valor incorrecto.
429Too Many RequestsLimitado por velocidad.Busca Retry-After antes de reintentar, e retrocede exponencialmente.
451Unavailable For Legal ReasonsBloqueado por razones legales. El número es una alusión a Fahrenheit 451.

5xx—Error del servidor

6

La solicitud puede estar bien. Estos son los que vale la pena reintentar.

CódigoFrase de razónQué significa
500Internal Server ErrorUn error no manejado en el servidor. Nada para arreglarte en tu lado.
501Not ImplementedEl servidor no implementa este método en absoluto.
502Bad GatewayUn proxy alcanzó el servidor ascendente e obtuvo algo inutilizable.
503Service UnavailableDeliberadamente no sirviendo—sobrecargado o en mantenimiento.El estado que debe llevar Retry-After.
504Gateway TimeoutUn proxy se rindió esperando el servidor ascendente.
505HTTP Version Not SupportedLa versión HTTP en la solicitud no es soportada.

Preguntas frecuentes

¿Cuál es la diferencia entre 401 y 403?
401 Unauthorized significa que la solicitud no fue autenticada—el servidor no sabe quién eres, e un 401 correcto incluye un encabezado WWW-Authenticate diciéndote cómo probarlo. 403 Forbidden significa que sabe exactamente quién eres y aún así no puedes tener esto. Reintentar un 403 con mejores credenciales para la misma identidad no ayudará.
¿Debo usar 301 o 308 para una redirección?
308 si el método importa. Históricamente 301 y 302 se implementaron ampliamente como "redireccionar e cambiar a GET", que silenciosamente convierte un POST en un GET. 307 y 308 fueron introducidos para prometer que el método y cuerpo se preservan. Para un movimiento permanente de una página que solo se obtiene, 301 sigue siendo la mejor opción comprendida.
¿Qué significa 422 que 400 no?
400 Bad Request significa que el servidor no pudo entender la solicitud en absoluto—JSON malformado, un encabezado roto. 422 Unprocessable Content significa que se analizó bien y el contenido es incorrecto de todos modos: un cuerpo bien formado con un campo requerido faltante o una fecha en el pasado. La división es útil precisamente porque la corrección del cliente es diferente en cada caso.
¿Es 418 un código de estado real?
Es real en que está registrado e cada biblioteca HTTP lo conoce, e una broma en que viene del Protocolo de control de tetera de hipertexto April Fools' de 1998. Los intentos de reclamar el número para uso práctico fueron rechazados, así que está permanentemente reservado para teteras.
¿Por qué 503 es diferente de 502?
502 Bad Gateway significa que un proxy alcanzó el servidor ascendente y obtuvo algo inutilizable. 503 Service Unavailable significa que el servidor en sí deliberadamente no está sirviendo ahora—sobrecargado, o en mantenimiento—e es el que debe llevar un encabezado Retry-After, porque es el que se espera que se recupere.