UTILIDADES Y HERRAMIENTAS
Códigos de estado HTTP
Una ficha de consulta para interpretar las principales respuestas HTTP utilizadas en aplicaciones web y APIs.
FUNDAMENTOS
Qué es un código de estado HTTP
Un código de estado HTTP es un número de tres cifras enviado por el servidor como parte de la respuesta a una petición. Permite indicar de forma estandarizada el resultado de esa petición.
HTTP/1.1 200 OK
En este ejemplo, 200es el código de estado y OKes una frase descriptiva
asociada al código.
La primera cifra identifica la clase general de respuesta:
1xx Información
2xx Éxito
3xx Redirección
4xx Error asociado a la solicitud del cliente
5xx Error del servidor
El código debe interpretarse junto con el método utilizado, las cabeceras, el cuerpo de la respuesta y el contexto de la operación.
HTTP
Petición y respuesta
HTTP sigue un modelo de petición y respuesta. Un cliente envía una petición y el servidor devuelve una respuesta que incluye un código de estado.
Cliente
↓
Petición HTTP
↓
Servidor
↓
Respuesta HTTP
↓
Código de estado
El código resume el resultado de la operación, pero no sustituye al resto de información de la respuesta.
INFORMATIVAS
Respuestas 1xx
Las respuestas de la clase 1xxson informativas. Indican un estado provisional de la
comunicación antes de que llegue una respuesta final.
100 Continue
101 Switching Protocols
No suelen ser los códigos con los que más trabaja directamente una aplicación cliente, pero forman parte del protocolo y aparecen en determinados flujos HTTP.
100
100 Continue
100 Continueindica que la parte inicial de la petición ha sido recibida y que el cliente
puede continuar enviando el cuerpo de la solicitud.
Puede intervenir cuando un cliente desea comprobar si el servidor aceptará determinadas condiciones antes de transmitir un cuerpo de petición potencialmente grande.
101
101 Switching Protocols
101 Switching Protocolsindica que el servidor acepta cambiar el protocolo de
comunicación de acuerdo con la negociación realizada en la petición.
Es un código relacionado con mecanismos de actualización del protocolo y no representa una respuesta de contenido convencional.
ÉXITO
Respuestas 2xx
Los códigos 2xxindican que la petición se ha recibido correctamente y que su
procesamiento ha producido un resultado considerado satisfactorio según el código concreto.
200 OK
201 Created
202 Accepted
204 No Content
No todos los resultados satisfactorios deben responder con 200. El código debe
representar la operación realizada.
200
200 OK
200 OKindica que la petición se ha procesado satisfactoriamente. Su significado concreto
depende del método HTTP.
GET /api/usuarios/42→200 OK
En una petición GET, la respuesta suele incluir una representación del recurso
solicitado cuando corresponde.
201
201 Created
201 Createdindica que la petición se ha completado y ha provocado la creación de uno o
más recursos.
POST /api/usuarios→201 Created
Cuando resulta apropiado, la respuesta puede indicar mediante sus cabeceras dónde se encuentra el recurso creado.
202
202 Accepted
202 Acceptedindica que la petición ha sido aceptada para su procesamiento, pero que
dicho procesamiento todavía no tiene por qué haberse completado.
Petición
↓
202 Accepted
↓
Procesamiento posterior
Es útil para operaciones asíncronas o tareas que no pueden completarse durante la misma interacción HTTP.
204
204 No Content
204 No Contentindica que la operación se ha realizado correctamente y que la respuesta
no incluye contenido de representación.
DELETE /api/usuarios/42→204 No Content
Es habitual en operaciones que no necesitan devolver un documento en el cuerpo de la respuesta.
REDIRECCIÓN
Respuestas 3xx
Los códigos 3xxindican que debe realizarse alguna acción adicional para completar la
interacción. Muchos están relacionados con redirecciones y otros con mecanismos de caché.
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
307 Temporary Redirect
308 Permanent Redirect
Los códigos de esta familia no son intercambiables. Las diferencias afectan, entre otras cosas, a la permanencia de la redirección y al tratamiento del método HTTP.
301
301 Moved Permanently
301 Moved Permanentlyindica que el recurso solicitado dispone de una nueva ubicación
permanente.
GET /ruta-antigua → 301 Moved Permanently
Location: /ruta-nueva
La cabecera Locationpuede indicar la nueva URI a la que debe dirigirse el cliente.
302
302 Found
302 Foundindica que el recurso se encuentra temporalmente en otra URI.
Su comportamiento histórico en clientes web hace importante distinguirlo de códigos como
307cuando se necesita preservar de forma explícita el método de la petición.
304
304 Not Modified
304 Not Modifiedse utiliza en peticiones condicionales para indicar que el cliente puede
reutilizar una representación almacenada en caché.
Cliente con copia en caché
↓
Petición condicional
↓
304 Not Modified
↓
Reutilizar copia almacenada
No debe interpretarse como un error ni como una redirección hacia otra página.
307 Y 308
Redirecciones que preservan el método
307 Temporary Redirecty 308 Permanent Redirectpermiten expresar
redirecciones manteniendo el método de la petición.
307 Temporary Redirect
308 Permanent Redirect
La diferencia principal entre ambos es que 307expresa una situación temporal y
308una permanente.
ERROR DE CLIENTE
Respuestas 4xx
Los códigos 4xxindican que la petición no puede completarse por una condición asociada a
la solicitud recibida.
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
409 Conflict
415 Unsupported Media Type
422 Unprocessable Content
429 Too Many Requests
No todos los errores 4xxsignifican lo mismo. Elegir el código adecuado ayuda a que
clientes, APIs y herramientas puedan interpretar correctamente el problema.
400
400 Bad Request
400 Bad Requestindica que el servidor no puede o no desea procesar la petición debido a
un problema percibido en la solicitud.
Puede utilizarse, según el diseño de la aplicación, cuando la petición presenta sintaxis incorrecta, datos mal formados u otras condiciones que impiden interpretarla adecuadamente.
401
401 Unauthorized
Aunque su nombre histórico es Unauthorized, 401está relacionado
principalmente con la necesidad de autenticación válida para acceder al recurso.
Petición sin credenciales válidas
↓
401 Unauthorized
No debe confundirse automáticamente con 403 Forbidden.
403
403 Forbidden
403 Forbiddenindica que el servidor comprende la petición pero rechaza atenderla.
Petición comprendida
↓
Acceso rechazado
↓
403 Forbidden
Autenticarse de nuevo no implica necesariamente que el acceso vaya a ser permitido.
404
404 Not Found
404 Not Foundindica que el servidor no ha encontrado una representación actual del
recurso solicitado o no está dispuesto a revelar que existe.
GET /api/recurso-inexistente→404 Not Found
Un 404demuestra que se ha obtenido una respuesta HTTP. Por tanto, no significa por sí
mismo que el servidor esté caído o sea inaccesible.
405
405 Method Not Allowed
405 Method Not Allowedindica que el servidor conoce el método utilizado pero el recurso
de destino no lo admite.
DELETE /recurso→405 Method Not Allowed
La respuesta debe indicar mediante la cabecera Allowlos métodos admitidos para el
recurso.
409
409 Conflict
409 Conflictindica que la petición no puede completarse debido a un conflicto con el
estado actual del recurso.
Puede aparecer, por ejemplo, cuando una operación entra en conflicto con una versión o estado existente y el cliente puede necesitar resolver esa situación antes de volver a intentarlo.
415
415 Unsupported Media Type
415 Unsupported Media Typeindica que el servidor rechaza la petición porque el formato
del contenido no es compatible con la operación solicitada.
Content-Type: formato no admitido
↓
415 Unsupported Media Type
En APIs es especialmente importante enviar un Content-Typecoherente con el cuerpo
transmitido.
422
422 Unprocessable Content
422 Unprocessable Contentindica que el servidor comprende el tipo de contenido y la
sintaxis de la petición, pero no puede procesar las instrucciones contenidas.
Puede resultar útil cuando la estructura de la solicitud es comprensible pero los datos no pueden procesarse conforme a las reglas de la operación.
429
429 Too Many Requests
429 Too Many Requestsindica que el cliente ha enviado demasiadas peticiones dentro de un
periodo determinado.
Demasiadas peticiones
↓
429 Too Many Requests
Puede utilizarse en mecanismos de limitación de tasa. La respuesta puede incluir información que ayude al cliente a determinar cuándo volver a intentarlo.
ERROR DE SERVIDOR
Respuestas 5xx
Los códigos 5xxindican que el servidor es consciente de que ha encontrado un error o que
no puede completar la petición.
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
Aunque el cliente reciba un 5xx, el origen concreto del problema puede encontrarse en el
propio servidor o en otro sistema del que dependa.
500
500 Internal Server Error
500 Internal Server Errorrepresenta una condición inesperada que impide al servidor
completar la petición.
Petición válida
↓
Fallo inesperado en el servidor
↓
500 Internal Server Error
Es un código genérico y no debería utilizarse para ocultar sistemáticamente condiciones que pueden describirse mediante códigos más específicos.
502
502 Bad Gateway
502 Bad Gatewayaparece cuando un servidor que actúa como gateway o proxy recibe una
respuesta no válida de un servidor ascendente.
Cliente
↓
Proxy o gateway
↓
Servidor ascendente
↓
Respuesta no válida
↓
502 Bad Gateway
Por tanto, el componente que devuelve el 502puede no ser el sistema que originó
realmente el fallo.
503
503 Service Unavailable
503 Service Unavailableindica que el servidor no puede atender temporalmente la
petición.
Puede relacionarse, por ejemplo, con una sobrecarga temporal o una operación de mantenimiento.
Cuando sea posible, la respuesta puede incluir información sobre el momento apropiado para volver a intentarlo.
504
504 Gateway Timeout
504 Gateway Timeoutindica que un servidor que actúa como gateway o proxy no recibió a
tiempo la respuesta necesaria de un servidor ascendente.
Cliente
↓
Gateway
↓
Servidor ascendente
↓
Tiempo de espera agotado
↓
504 Gateway Timeout
Se diferencia de 502en que el problema descrito está relacionado específicamente con la
ausencia de una respuesta a tiempo.
AUTENTICACIÓN Y ACCESO
Diferencia entre 401 y 403
401y 403suelen confundirse, pero expresan situaciones diferentes.
401 Unauthorized
Autenticación necesaria o no válida
403 Forbidden
Petición comprendida, acceso rechazado
La elección debe basarse en la situación real y en la semántica definida por HTTP, no únicamente en el texto descriptivo del código.
DIAGNÓSTICO
Diferencia entre 404 y 500
Ambos códigos representan resultados fallidos, pero describen problemas de naturaleza diferente.
404 Not Found
El recurso solicitado no se encuentra
500 Internal Server Error
El servidor encuentra un fallo inesperado
Convertir indiscriminadamente cualquier error en un 500reduce la información disponible
para clientes, desarrolladores y sistemas de monitorización.
APIS
Códigos habituales en APIs
Una API debe escoger el código según el resultado real de la operación y mantener una semántica coherente entre endpoints.
GET /recursos/42 → 200 OK
POST /recursos → 201 Created
DELETE /recursos/42 → 204 No Content
Ante resultados diferentes podrían aparecer, por ejemplo:
GET /recursos/999 → 404 Not Found
POST /recursos → 400 Bad Request
GET /privado → 401 Unauthorized
GET /restringido → 403 Forbidden
Estos ejemplos muestran relaciones habituales, no una regla automática aplicable a cualquier API. El diseño concreto debe respetar la semántica HTTP y las condiciones reales de cada operación.
APIS
Código y cuerpo de respuesta
En una API, el código de estado y el cuerpo de la respuesta cumplen funciones relacionadas pero diferentes.
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "recurso_no_encontrado",
"message": "El recurso solicitado no existe"
}
El código proporciona una señal estandarizada a nivel HTTP. El cuerpo puede aportar información adicional específica de la aplicación cuando corresponda.
El cliente no debería necesitar analizar un mensaje de texto humano para descubrir si la operación ha tenido éxito o ha fallado.
CONTEXTO
El código no actúa solo
Para interpretar correctamente una respuesta HTTP puede ser necesario examinar también sus cabeceras.
Location
Allow
Content-Type
Retry-After
WWW-Authenticate
Por ejemplo, una redirección puede utilizar Location, un 405se relaciona
con Allowy determinadas respuestas de autenticación incluyen información adicional
mediante WWW-Authenticate.
SEMÁNTICA
El método también importa
El significado práctico de una respuesta debe interpretarse teniendo en cuenta el método HTTP utilizado.
GET
POST
PUT
PATCH
DELETE
Por ejemplo, un 201 Createdtiene sentido cuando la operación ha creado un recurso,
mientras que un 204 No Contentpuede ser adecuado cuando la operación finaliza
correctamente y no necesita devolver una representación.
Elegir códigos únicamente a partir del nombre del endpoint puede producir respuestas incoherentes.
CRITERIO TÉCNICO
Errores frecuentes de interpretación
- Interpretar
401simplemente como «sin permisos» sin considerar su relación con la autenticación. - Interpretar
403como equivalente a401. - Suponer que
404significa que el servidor está caído. - Utilizar
200 OKpara cualquier respuesta, incluso cuando la operación ha fallado. - Utilizar
500para errores que realmente pertenecen a la petición o tienen un código más específico. - Considerar todos los códigos
3xxequivalentes. - Analizar únicamente el cuerpo de una API e ignorar el código HTTP.
- Elegir un código por su nombre informal sin comprobar su semántica.
DIAGNÓSTICO
Interpretar una respuesta
Cuando una petición no produce el resultado esperado, conviene analizar la respuesta de forma ordenada.
Método y URL
↓
Código de estado
↓
Cabeceras
↓
Cuerpo de respuesta
↓
Logs y contexto de la aplicación
El código proporciona una primera clasificación, pero un diagnóstico completo puede requerir revisar el resto de la respuesta y los sistemas implicados.
TERMINAL
Consultar respuestas con curl
Cuando curlestá disponible, puede utilizarse para inspeccionar respuestas HTTP desde la
terminal.
curl -I https://example.com
También puede mostrarse información de cabeceras durante una petición:
curl -i https://example.com
Las opciones disponibles dependen de la versión instalada. Puedes consultar también la ficha de comandos Linuxpara otras operaciones habituales de terminal.
RESUMEN
Referencia rápida
100 Continue
101 Switching Protocols
200 OK
201 Created
202 Accepted
204 No Content
301 Moved Permanently
302 Found
304 Not Modified
307 Temporary Redirect
308 Permanent Redirect
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
409 Conflict
415 Unsupported Media Type
422 Unprocessable Content
429 Too Many Requests
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
Esta selección reúne códigos habituales, pero HTTP define más códigos de estado. La documentación del protocolo debe utilizarse como referencia cuando sea necesario conocer la semántica exacta de uno de ellos.
IDEAS CLAVE
Qué conviene recordar
- La primera cifra identifica la familia general de la respuesta.
- Un código debe elegirse por su semántica, no únicamente por su nombre.
2xxcontiene diferentes tipos de resultados satisfactorios.3xxincluye comportamientos distintos relacionados con redirección y caché.401y403no son equivalentes.- Un
404es una respuesta HTTP y no demuestra que el servidor esté caído. - Los códigos
5xxindican problemas al completar la petición desde el lado servidor. - El código debe interpretarse junto con el método, las cabeceras y el cuerpo de la respuesta.
SIGUE CONSULTANDO
Recursos relacionados
- Comandos Linux — herramientas de terminal y
ejemplos de uso de
curl. - JSON: conceptos y sintaxis — formato utilizado habitualmente en cuerpos de peticiones y respuestas de APIs.
- Expresiones regulares — patrones para búsqueda, validación y procesamiento de texto.
- Markdown: sintaxis básica — referencia para documentación técnica.
PARA AMPLIAR
Documentación de referencia
Documentación primaria y referencias reconocidas para consultar la semántica de HTTP y los códigos de estado.