Red
Lista de Códigos de Estado HTTP
Lista completa de códigos de estado HTTP (1xx-5xx) con significados, causas comunes y soluciones para desarrolladores. Incluye una herramienta de búsqueda: introduce un número de código para ver los detalles al instante.
| Código | Nombre | Significado | Causas Comunes |
|---|---|---|---|
| 1xx — Informativo | |||
| 100 | Continue (Continue) | Indica que el servidor ha recibido la primera parte de la solicitud y que el cliente debe continuar enviando el resto. | Se devuelve cuando un cliente envía una cabecera Expect: 100-continue antes de un cuerpo de solicitud grande. |
| 101 | Switching Protocols (Switching Protocols) | Indica que el servidor acepta la solicitud de la cabecera Upgrade y está cambiando a un protocolo diferente. | Una respuesta normal al establecer una conexión WebSocket. |
| 102 | Processing (Processing) | Indica que el servidor ha aceptado la solicitud y aún la está procesando, sin una respuesta lista todavía (WebDAV). | Se envía para evitar tiempos de espera agotados durante operaciones WebDAV de larga duración. |
| 103 | Early Hints (Early Hints) | Envía cabeceras preliminares como Link antes de la respuesta final, permitiendo al navegador precargar recursos. | Añadido por CDN o proxies inversos para acelerar la precarga de CSS/JS. |
| 2xx — Éxito | |||
| 200 | OK (OK) | La respuesta de éxito más común, que indica que la solicitud se procesó correctamente. | |
| 201 | Created (Created) | Indica que se creó un nuevo recurso como resultado de la solicitud. | Devuelto por APIs que crean recursos mediante POST; normalmente incluye una cabecera Location que apunta al nuevo recurso. |
| 202 | Accepted (Accepted) | Indica que la solicitud fue aceptada pero el procesamiento aún no ha finalizado (procesamiento asíncrono). | Usado por APIs asíncronas que simplemente encolan trabajo, o endpoints de recepción para procesamiento por lotes. |
| 204 | No Content (No Content) | Indica que la solicitud se completó con éxito pero no hay contenido que devolver. | Común tras un DELETE exitoso, o una actualización PUT cuyo diseño de API omite el cuerpo de la respuesta. |
| 206 | Partial Content (Partial Content) | Indica que solo se devolvió parte del recurso, según la cabecera Range del cliente. | Una respuesta normal para la búsqueda en vídeos o las descargas reanudables. |
| 3xx — Redirección | |||
| 301 | Moved Permanently (Moved Permanently) | Indica que el recurso se ha trasladado permanentemente a una nueva URL; los motores de búsqueda transfieren las señales de posicionamiento a la nueva URL. | Se usa para redirigir URLs antiguas tras un cambio de estructura de URL o una migración de dominio. |
| 302 | Found (Found) | Indica que el recurso se encuentra temporalmente en una URL diferente. Los traslados permanentes deberían usar 301 en su lugar. | Se usa habitualmente para el enrutamiento temporal durante el mantenimiento, o para redirecciones tras el inicio de sesión. |
| 303 | See Other (See Other) | Indica que el resultado debe obtenerse con GET desde otra URL (el patrón Post-Redirect-Get). | Se usa después del envío de un formulario (POST) para evitar el cuadro de diálogo de reenvío del navegador. |
| 304 | Not Modified (Not Modified) | Indica que el recurso en caché no ha cambiado, por lo que el cuerpo no se reenvía. | Se devuelve en solicitudes condicionales que usan If-None-Match / If-Modified-Since cuando la caché sigue siendo válida. |
| 307 | Temporary Redirect (Temporary Redirect) | Una redirección temporal que, a diferencia de 302, conserva el método y el cuerpo originales al reenviar. | Se usa en diseños de API que necesitan redirigir solicitudes POST/PUT conservando el cuerpo. |
| 308 | Permanent Redirect (Permanent Redirect) | Una redirección permanente que, a diferencia de 301, conserva el método y el cuerpo originales al reenviar. | Se usa para migraciones de versión de API que necesitan un traslado permanente conservando el método. |
| 4xx — Error del Cliente | |||
| 400 | Bad Request (Bad Request) | Indica que la sintaxis o los parámetros de la solicitud son incorrectos y el servidor no puede entenderla. | Normalmente causado por errores de sintaxis JSON, parámetros obligatorios faltantes o incompatibilidades de tipo. |
| 401 | Unauthorized (Unauthorized) | Indica credenciales de autenticación ausentes o inválidas (a pesar del nombre, en realidad significa "no autenticado"). | A menudo causado por un token caducado, una cabecera Authorization ausente o una clave de API incorrecta. |
| 402 | Payment Required (Payment Required) | Reservado para uso futuro; a veces se usa para indicar que se requiere un pago. | Algunas APIs lo reutilizan para señalar que se ha excedido un límite de uso o que un plan de facturación ha caducado. |
| 403 | Forbidden (Forbidden) | Indica que el servidor entendió la solicitud pero se niega a autorizarla. | Las causas típicas incluyen permisos insuficientes, restricciones de IP, violaciones de la política CORS o configuraciones incorrectas de permisos de archivo. |
| 404 | Not Found (Not Found) | Indica que el recurso solicitado no se pudo encontrar. | Generalmente causado por una ruta no registrada, un error tipográfico en la URL, o el acceso a un recurso ya eliminado. |
| 405 | Method Not Allowed (Method Not Allowed) | Indica que el recurso existe pero el método HTTP especificado no está permitido en él. | Suele ocurrir cuando se envía un POST a un endpoint solo-GET, o una discrepancia de método similar. |
| 406 | Not Acceptable (Not Acceptable) | Indica que el servidor no puede generar una respuesta que coincida con la cabecera Accept del cliente. | Ocurre cuando un cliente solicita Accept: application/xml a una API que solo devuelve JSON, por ejemplo. |
| 408 | Request Timeout (Request Timeout) | Indica que el servidor agotó el tiempo de espera mientras aguardaba a que el cliente completara la solicitud. | A menudo causado por conexiones lentas, cargas grandes, o un cliente que se bloquea a mitad de la solicitud. |
| 409 | Conflict (Conflict) | Indica que la solicitud entra en conflicto con el estado actual del recurso. | Ocurre con fallos de bloqueo optimista durante ediciones concurrentes, o intentos de crear duplicados. |
| 410 | Gone (Gone) | Indica que el recurso se ha eliminado permanentemente y no volverá (una señal más fuerte que 404). | Se usa para indicar explícitamente a los motores de búsqueda que el contenido fue eliminado y retirado intencionadamente. |
| 413 | Payload Too Large (Payload Too Large) | Indica que el cuerpo de la solicitud excede el tamaño que el servidor está dispuesto a aceptar. | Normalmente causado por superar un límite de tamaño de carga de archivos, o una configuración insuficiente del tamaño del cuerpo en Nginx/PHP. |
| 414 | URI Too Long (URI Too Long) | Indica que la URI de la solicitud es más larga de lo que el servidor está dispuesto a procesar. | A menudo ocurre cuando se empaqueta una gran cantidad de datos en parámetros de consulta GET. |
| 415 | Unsupported Media Type (Unsupported Media Type) | Indica que el servidor no admite el tipo de medio del cuerpo de la solicitud. | Común al enviar Content-Type: text/plain a una API JSON, o configuraciones de cabecera similares incorrectas. |
| 422 | Unprocessable Entity (Unprocessable Entity) | Indica que la sintaxis de la solicitud es válida pero la validación semántica falló. | Se usa frecuentemente para reportar errores de validación de formularios, como campos obligatorios faltantes o formatos inválidos. |
| 425 | Too Early (Too Early) | Indica que el servidor se niega a procesar una solicitud que podría reproducirse debido al riesgo de datos tempranos. | Puede devolverse como defensa contra ataques de repetición usando datos 0-RTT de TLS 1.3. |
| 429 | Too Many Requests (Too Many Requests) | Indica que el cliente ha enviado demasiadas solicitudes dentro de una ventana de tiempo determinada (limitación de tasa). | Causado por superar un límite de tasa de la API; la cabecera Retry-After suele indicar cuánto tiempo esperar antes de reintentar. |
| 451 | Unavailable For Legal Reasons (Unavailable For Legal Reasons) | Indica que el contenido no está disponible debido a una exigencia legal, como una orden judicial. | Se devuelve cuando un proveedor de contenido bloquea el acceso debido a una reclamación de derechos de autor o una regulación legal específica de un país. |
| 5xx — Error del Servidor | |||
| 500 | Internal Server Error (Internal Server Error) | Indica que ocurrió un error inesperado en el servidor y la solicitud no pudo procesarse. | Las causas varían ampliamente: excepciones no controladas en la aplicación, configuraciones incorrectas, fallos de conexión a la base de datos, y más. |
| 501 | Not Implemented (Not Implemented) | Indica que el servidor no admite la funcionalidad necesaria para cumplir con la solicitud. | Ocurre cuando se envía un método HTTP no implementado (por ejemplo, PATCH) a una implementación de servidor más antigua. |
| 502 | Bad Gateway (Bad Gateway) | Indica que un proxy o gateway recibió una respuesta inválida del servidor de origen. | Normalmente causado porque el servidor de aplicaciones de origen está caído o se ha bloqueado. |
| 503 | Service Unavailable (Service Unavailable) | Indica que el servidor está temporalmente sobrecargado o en mantenimiento y no puede atender la solicitud. | Causado principalmente por el agotamiento de recursos bajo carga elevada, o una ventana de mantenimiento planificada. |
| 504 | Gateway Timeout (Gateway Timeout) | Indica que un proxy o gateway no recibió una respuesta a tiempo del servidor de origen. | A menudo causado por un procesamiento backend de larga duración, latencia de red, o un servidor de origen que se cuelga. |
| 505 | HTTP Version Not Supported (HTTP Version Not Supported) | Indica que el servidor no admite la versión de HTTP utilizada en la solicitud. | Ocurre cuando un cliente antiguo o un proxy mal configurado se comunica usando una versión de HTTP inesperada. |
| 507 | Insufficient Storage (Insufficient Storage) | Indica que el servidor no tiene suficiente almacenamiento para completar la solicitud (WebDAV). | Se devuelve cuando una operación de almacenamiento de archivos falla por espacio en disco insuficiente. |
| 508 | Loop Detected (Loop Detected) | Indica que el servidor detectó un bucle infinito mientras procesaba la solicitud (WebDAV). | Ocurre cuando una configuración de enlace WebDAV contiene una referencia circular. |
| 511 | Network Authentication Required (Network Authentication Required) | Indica que el cliente necesita autenticarse para obtener acceso a la red. | Se usa para redirigir a una página de inicio de sesión de portal cautivo, como en el Wi-Fi público. |
Consejos
- 404 y 410 se parecen, pero 410 señala explícitamente que el contenido se eliminó de forma intencionada y no volverá. Usa 410 para contenido sin reemplazo y así enviar una señal más clara a los motores de búsqueda.
- 301 frente a 308 y 302 frente a 307 comparten la misma distinción "permanente frente a temporal", pero 308 y 307 conservan el cuerpo POST original al reenviar, a diferencia de 301 y 302.
- Cuando recibas un 429 Too Many Requests, revisa la cabecera
Retry-Aftery espera ese tiempo antes de reintentar: seguir insistiendo en el endpoint puede hacer que te bloqueen por completo. - Un error 5xx señala un problema del lado del servidor, no un fallo en tu solicitud; revisa los registros del servidor y el estado de disponibilidad antes de depurar tu código cliente.
- La pestaña Red de las herramientas de desarrollo de tu navegador colorea los códigos de estado de cada solicitud. Combinar eso con esta referencia hace que la depuración sea mucho más rápida.
Preguntas Frecuentes
-i de curl, o introduce el número de código en la herramienta de búsqueda de esta página para ver su significado.
A propósito — Breve historia de los códigos de estado HTTP
El sistema de códigos de estado HTTP se estandarizó por primera vez en el RFC 1945, la especificación de HTTP/1.0 publicada en 1996. HTTP/1.1 (RFC 2616), publicado en 1999, estableció la mayor parte del sistema de códigos que usamos hoy en día, incluidas las familias 4xx y 5xx, y desde entonces se ha mantenido a través del RFC 7231 (2014) y el RFC 9110 (2022).
El famoso código de broma 418 I'm a teapot se originó en un RFC del Día de los Inocentes de 1998 que describía el ficticio "Hyper Text Coffee Pot Control Protocol" (HTCPCP). El código estaba pensado para devolverse si le pedías a una tetera que preparara café.
Se cree que el principio de diseño según el cual el primer dígito indica una categoría amplia influyó en sistemas de códigos de retorno posteriores en protocolos como SMTP y FTP. La simplicidad de "1xx = informativo, 2xx = éxito" se ha mantenido esencialmente sin cambios durante casi tres décadas.
451 Unavailable For Legal Reasons es una incorporación relativamente reciente, estandarizada formalmente en el RFC 7725 en 2015. El número 451 se eligió deliberadamente como un guiño a la novela distópica de Ray Bradbury "Fahrenheit 451", centrada en la censura.