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.

Tabla de Referencia de Códigos de Estado HTTP
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-After y 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

Ambos indican que no se encontró un recurso, pero 404 es un "no encontrado" genérico que puede ser temporal, mientras que 410 señala explícitamente que el recurso se eliminó permanentemente y nunca volverá. Usa 410 para contenido eliminado intencionadamente y así enviar una señal más clara para el SEO.

Una redirección 301 (permanente) transfiere casi todas las señales de posicionamiento de la URL antigua a la nueva URL. Una redirección 302 (temporal) le indica a los motores de búsqueda que sigan tratando la URL antigua como canónica, por lo que los traslados permanentes siempre deberían usar 301.

401 Unauthorized en realidad significa "no autenticado": el cliente no ha demostrado quién es. 403 Forbidden significa que el cliente está autenticado pero carece de permisos. A pesar de los nombres, 401 trata sobre la autenticación y 403 sobre la autorización.

Un 502 significa que un proxy inverso o balanceador de carga recibió una respuesta inválida del servidor de aplicaciones de origen. Empieza por comprobar si el proceso del servidor de aplicaciones está en ejecución y no se ha bloqueado.

Usa la pestaña Red de las herramientas de desarrollo de tu navegador, la opción -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.