Referencia de Códigos de Estado HTTP
Explora códigos de estado HTTP con sus descripciones.
| Code | Name | Class | Meaning |
|---|---|---|---|
| 100 | Continue | Informational | The client should continue with its request. |
| 101 | Switching Protocols | Informational | The server is switching protocols as requested. |
| 200 | OK | Success | The request succeeded. |
| 201 | Created | Success | The request succeeded and a new resource was created. |
| 202 | Accepted | Success | The request was accepted but not yet processed. |
| 204 | No Content | Success | Success, but there is no content to return. |
| 206 | Partial Content | Success | The server delivered part of the resource (range request). |
| 301 | Moved Permanently | Redirection | The resource has permanently moved to a new URL. |
| 302 | Found | Redirection | The resource is temporarily at a different URL. |
| 304 | Not Modified | Redirection | The cached version is still valid. |
| 307 | Temporary Redirect | Redirection | Temporary redirect that preserves the method. |
| 308 | Permanent Redirect | Redirection | Permanent redirect that preserves the method. |
| 400 | Bad Request | Client Error | The server could not understand the request. |
| 401 | Unauthorized | Client Error | Authentication is required and has failed or not been provided. |
| 403 | Forbidden | Client Error | The server understood but refuses to authorize the request. |
| 404 | Not Found | Client Error | The requested resource could not be found. |
| 405 | Method Not Allowed | Client Error | The HTTP method is not supported for this resource. |
| 408 | Request Timeout | Client Error | The server timed out waiting for the request. |
| 409 | Conflict | Client Error | The request conflicts with the current state of the resource. |
| 410 | Gone | Client Error | The resource is permanently gone. |
| 418 | I'm a teapot | Client Error | An April Fools joke from RFC 2324. |
| 422 | Unprocessable Entity | Client Error | The request was well-formed but semantically invalid. |
| 429 | Too Many Requests | Client Error | The client has sent too many requests (rate limited). |
| 500 | Internal Server Error | Server Error | A generic server-side error occurred. |
| 501 | Not Implemented | Server Error | The server does not support the requested functionality. |
| 502 | Bad Gateway | Server Error | An upstream server returned an invalid response. |
| 503 | Service Unavailable | Server Error | The server is temporarily overloaded or down. |
| 504 | Gateway Timeout | Server Error | An upstream server did not respond in time. |
Descripción general
Un código de estado es el resumen en una palabra que hace el servidor de lo que ha pasado, y elegir el equivocado tiene consecuencias que van mucho más allá de la pulcritud: cambia si los clientes reintentan, si las cachés guardan la respuesta, si los rastreadores conservan la URL y si un proxy vuelve a procesar la petición.
Esto es una referencia buscable de los códigos que te encuentras de verdad, con la distinción práctica de cada uno en lugar de una reformulación de la especificación.
Cómo se usa
Escribe un número (404) o parte de un nombre (gateway) para filtrar la lista.
La coincidencia se busca en los dos campos, así que too many y 429 encuentran
la misma entrada.
Las cinco clases
| Clase | Significado | Qué debería hacer un cliente |
|---|---|---|
1xx | Informativa: la petición sigue en curso | Seguir esperando |
2xx | Éxito | Usar la respuesta |
3xx | Redirección: el recurso está en otro sitio, o no ha cambiado | Seguirla, o usar la caché |
4xx | Error del cliente: la propia petición es el problema | No reintentar sin cambiarla |
5xx | Error del servidor: la petición pudo estar bien | Reintentar con espera creciente |
La división entre 4xx y 5xx es la que más importa en la práctica, porque
determina el comportamiento de reintento. A un servidor que devuelve 500 para
una petición mal formada le llegará esa misma petición mal formada otra vez, y
otra, desde todos los clientes bien educados que tengan una política de
reintentos. Devolver 400 corta el bucle.
Las distinciones que vale la pena acertar
200 con un error en el cuerpo. Habitual en las API y casi siempre
equivocado. Todas las capas que hay entre tú y el cliente —cachés, proxies,
monitorización, lógica de reintentos— leen el código de estado, no tu JSON. Un
error que devuelve 200 es invisible para todas ellas.
201 frente a 200 al crear. Un 201 debería llevar una cabecera Location
que apunte al recurso nuevo. Esa es la parte que usan los clientes; el código por
sí solo aporta poco.
202 Accepted. La respuesta correcta para un trabajo que has puesto en cola
en lugar de hacer. Es una promesa, así que tiene que decirle al cliente dónde
comprobarla: una URL de estado, o un id de trabajo.
204 No Content. Éxito con un cuerpo intencionadamente vacío, típicamente
para un DELETE o para un PUT que no devuelve nada. No debe tener ningún cuerpo
en absoluto, y no un objeto JSON vacío.
304 Not Modified. La respuesta a una petición condicional cuyo ETag o
Last-Modified sigue coincidiendo. No lleva cuerpo, y eso es justamente todo el
sentido: el cliente ya tiene los bytes. Si nunca devuelves 304, cada
revalidación vuelve a transferir el recurso completo.
400 frente a 422. 400 para una petición que el servidor no pudo analizar:
JSON mal formado, un parámetro obligatorio que falta. 422 para una petición que
se analizó sin problemas y no pasó la validación. La distinción le dice al cliente
si tiene que arreglar su serialización o sus datos.
405 Method Not Allowed. Debe incluir una cabecera Allow con la lista de
métodos que sí se aceptan. Sin ella, al cliente le han dicho que no sin darle
ninguna salida.
409 Conflict. Para una petición que no se puede aplicar al estado actual: una
edición contra una versión obsoleta, un duplicado que viola una restricción de
unicidad. No es un «algo ha ido mal» genérico.
410 Gone. Un 404 más fuerte: esto existió y no va a volver. Los rastreadores
descartan un 410 más rápido que un 404, que es lo que quieres para contenido
que has eliminado a propósito.
429 Too Many Requests. Necesita Retry-After. Sin ella, los clientes
adivinan, y adivinan mal: normalmente reintentando de inmediato.
502 frente a 503 frente a 504. 502 significa que un servicio de arriba
dio una respuesta no válida. 503 significa que este servidor no está disponible,
típicamente sobrecargado o en mantenimiento. 504 significa que un servicio de
arriba no respondió a tiempo. Señalan a tres sitios distintos, y usarlos de forma
intercambiable hace más difícil localizar una caída.
Ejemplos
- Un rastreador sigue pidiendo una página borrada. Devuelve
410en lugar de404. - Un cliente machaca un endpoint que falla. Comprueba si el fallo devuelve
5xxpara lo que en realidad es una condición4xx. - El envío de un formulario pierde sus datos detrás de una redirección. La
redirección es probablemente un
301o un302; cámbiala a308o307. - Un CDN no cachea una respuesta. Las
2xxy las3xxson cacheables por defecto; la mayoría de las4xxno lo son, y las5xxno deberían serlo nunca. - Una API devuelve
200y los clientes ignoran el fallo. No lo están ignorando: nada se lo ha dicho.
Notas
418 I'm a teapot es real, en el sentido de que está registrado y reservado de
forma permanente. Viene de una RFC del día de los inocentes y está en la lista
porque la gente lo busca.
Los códigos fuera del registro son legales. Un cliente debe tratar cualquier
código desconocido según su clase, así que un 299 personalizado se maneja como
un éxito y un 599 personalizado como un error de servidor. Usar uno rara vez
compensa la confusión que genera.
La lista de aquí cubre los códigos que se usan de verdad. El registro completo lo mantiene la IANA e incluye códigos para WebDAV y otras extensiones que un servicio web típico nunca devuelve.
Para ver qué códigos devuelve realmente una URL en producción, incluida su cadena de redirecciones, usa el verificador de cabeceras HTTP.