> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/appweb-for-juniors/fundamentos-de-aplicaciones-web/codigos-de-estado-http.md).

# Códigos de estado HTTP

En el mundo del pentesting, comprender los códigos de estado HTTP es fundamental. Estos códigos son respuestas estándar emitidas por los servidores web para indicar el estado de las solicitudes HTTP realizadas por los clientes (navegadores o herramientas de prueba). Conocer estos códigos te ayudará a interpretar correctamente las respuestas del servidor y a identificar posibles vulnerabilidades o errores en la configuración del servidor web.

## <mark style="color:green;">**¿Qué son los Códigos de Estado HTTP?**</mark>

Los códigos de estado HTTP son números de tres dígitos divididos en cinco categorías, cada una de las cuales indica un tipo específico de respuesta:

1. <mark style="color:green;">**1xx: Informativos**</mark> – Indican que la solicitud ha sido recibida y el proceso continúa.
2. <mark style="color:green;">**2xx: Éxito**</mark> – Indican que la solicitud fue recibida, comprendida y aceptada correctamente.
3. <mark style="color:green;">**3xx: Redirección**</mark> – Indican que se deben tomar más acciones por parte del cliente para completar la solicitud.
4. <mark style="color:green;">**4xx: Errores del Cliente**</mark> – Indican que hubo un problema con la solicitud enviada por el cliente.
5. <mark style="color:green;">**5xx: Errores del Servidor**</mark> – Indican que el servidor falló al cumplir con una solicitud aparentemente válida.

## <mark style="color:green;">**Códigos de Estado Más Relevantes**</mark>

### <mark style="color:green;">**2xx: Éxito**</mark>

* <mark style="color:green;">**200 OK**</mark><mark style="color:green;">:</mark> Este es el código más común y significa que la solicitud fue exitosa y el servidor devolvió los datos solicitados. En pentesting, un **200 OK** puede confirmar que un recurso está disponible y accesible.
* <mark style="color:green;">**201 Created**</mark><mark style="color:green;">:</mark> Indica que la solicitud fue exitosa y que un nuevo recurso fue creado. Es relevante cuando se prueban API que permiten la creación de recursos, como la creación de un nuevo usuario.
* <mark style="color:green;">**204 No Content**</mark><mark style="color:green;">:</mark> Indica que la solicitud fue exitosa pero no hay contenido que devolver. Esto puede ocurrir en operaciones de eliminación o cuando se espera un cambio de estado sin necesidad de contenido adicional.

### <mark style="color:green;">**3xx: Redirección**</mark>

* <mark style="color:green;">**301 Moved Permanently**</mark><mark style="color:green;">:</mark> Este código indica que el recurso solicitado ha sido movido de forma permanente a una nueva URL. En pentesting, esto es útil para entender la estructura del sitio web y detectar posibles redirecciones maliciosas.
* <mark style="color:green;">**302 Found**</mark><mark style="color:green;">:</mark> Similar al 301, pero la redirección es temporal. Es común en sitios web que redirigen a los usuarios a páginas de inicio de sesión o de mantenimiento.
* <mark style="color:green;">**304 Not Modified**</mark><mark style="color:green;">:</mark> Indica que el recurso no ha cambiado desde la última solicitud. Esto es útil para optimizar el rendimiento, pero en pentesting puede ser relevante para entender cómo el servidor gestiona la caché.

### <mark style="color:green;">**4xx: Errores del Cliente**</mark>

* <mark style="color:green;">**400 Bad Request**</mark><mark style="color:green;">:</mark> Indica que la solicitud no se pudo procesar debido a un error del cliente, como una sintaxis incorrecta. Esto puede ayudar a detectar errores en las solicitudes durante las pruebas de fuzzing o manipulación de parámetros.
* <mark style="color:green;">**401 Unauthorized**</mark><mark style="color:green;">:</mark> Indica que se requiere autenticación para acceder al recurso. En pentesting, este código es relevante para probar mecanismos de autenticación y autorización.
* <mark style="color:green;">**403 Forbidden**</mark><mark style="color:green;">:</mark> Significa que el servidor entiende la solicitud, pero se niega a cumplirla. Es crucial para identificar áreas restringidas o mal configuradas en el servidor.
* <mark style="color:green;">**404 Not Found**</mark><mark style="color:green;">:</mark> Este es uno de los códigos más conocidos y significa que el recurso solicitado no fue encontrado. Es útil para mapear el sitio web y detectar recursos ocultos o eliminados.
* <mark style="color:green;">**405 Method Not Allowed**</mark><mark style="color:green;">:</mark> Indica que el método HTTP usado no está permitido para el recurso solicitado. Esto es relevante al probar diferentes métodos HTTP como GET, POST, PUT, DELETE, etc.

### <mark style="color:green;">**5xx: Errores del Servidor**</mark>

* <mark style="color:green;">**500 Internal Server Error**</mark><mark style="color:green;">:</mark> Indica un error genérico en el servidor. En pentesting, puede ser indicativo de problemas de configuración o vulnerabilidades en la lógica del servidor.
* <mark style="color:green;">**502 Bad Gateway**</mark><mark style="color:green;">:</mark> Indica que un servidor, actuando como puerta de enlace o proxy, recibió una respuesta inválida del servidor upstream. Esto es útil para identificar problemas en configuraciones de proxy o balanceadores de carga.
* <mark style="color:green;">**503 Service Unavailable**</mark><mark style="color:green;">:</mark> Indica que el servidor no está disponible temporalmente, generalmente debido a sobrecarga o mantenimiento. Es importante para entender la disponibilidad y resiliencia del servidor.
* <mark style="color:green;">**504 Gateway Timeout**</mark><mark style="color:green;">:</mark> Indica que el servidor, actuando como puerta de enlace o proxy, no recibió una respuesta a tiempo del servidor upstream. En pentesting, esto puede revelar problemas de rendimiento o comunicación entre servidores.

## <mark style="color:green;">**Conclusión**</mark>

Comprender los códigos de estado HTTP es esencial para cualquier pentester. Estos códigos no solo indican el éxito o fracaso de una solicitud, sino que también proporcionan información valiosa sobre el comportamiento del servidor y la interacción con los clientes. Al profundizar en cada uno de estos códigos, podrás interpretar mejor las respuestas del servidor y utilizar esta información para identificar y explotar vulnerabilidades de manera efectiva.
