Saltar al contenido
Open Security
Redes e Internet Inicial · 12 min

4xx vs 5xx: ¿de quién es la culpa?

Lab quirúrgico para decidir, en un segundo, si un error HTTP es culpa de la request o del servidor. Con árbol de decisión y quiz.

#redes#http#debugging

Antes de empezar necesitás

  • Haber visto una respuesta HTTP (lab: una request no es magia)

Al terminar vas a poder

  • Separar 4xx (culpa de la request) de 5xx (culpa del servidor)
  • Reaccionar distinto ante un 401, un 403 y un 404
  • Saber por dónde empezar a debuggear según el código

Cuando algo falla por HTTP, la primera bifurcación te ahorra horas: ¿el problema está en lo que mandaste, o en el servidor que respondió? El código de estado ya te lo dice.

La regla

flowchart TD
A[Recibís un código de error] --> B{¿Empieza con 4 o 5?}
B -->|4xx| C[Culpa de la REQUEST]
B -->|5xx| D[Culpa del SERVIDOR]
C --> C1[Revisá: URL, token, permisos, body]
D --> D1[Revisá: logs del server, deploy, dependencias]
La primera pregunta ante cualquier error HTTP.
  • 4xx = vos. Mandaste algo que el servidor no puede aceptar: sin token, sin permiso, a una URL que no existe, con un body inválido. El servidor está sano; rechazó tu pedido.
  • 5xx = el servidor. Tu request era válida, pero el servidor no pudo cumplirla: explotó, se quedó sin una dependencia, o un gateway no llegó al backend.

Los 4xx que más vas a ver

400  Bad Request    el body o los parámetros están mal formados
401  Unauthorized   no estás autenticado (falta o venció el token)
403  Forbidden      estás autenticado, pero no tenés permiso
404  Not Found      el recurso no existe (o no querés que sepas que existe)
429  Too Many Req.  te frenaron por rate limit

Buscá cualquier código

¿No te acordás qué era un 418 o un 451? Buscalo: filtrá por familia (4xx, 5xx…) y leé qué significa cada uno y de qué lado está la culpa.

Explorador de códigos HTTP

Buscá por número (403) o por nombre (forbidden) y entendé cuándo se usa cada uno.

  • 200
    OK

    Todo salió bien. La respuesta trae el contenido pedido.

  • 201
    Created

    Se creó un recurso. Devolvé su URL en el header Location.

  • 204
    No Content

    Salió bien pero no hay cuerpo. Típico en DELETE o PUT.

  • 301
    Moved Permanently

    El recurso cambió de URL para siempre. El cliente debería cachear.

  • 302
    Found

    Redirección temporal. La URL original sigue siendo la buena.

  • 304
    Not Modified

    No cambió desde tu última visita. Usá tu copia en caché.

  • 400
    Bad Request

    El cliente mandó algo mal formado. Es culpa de quien pide.

  • 401
    Unauthorized

    Falta autenticación: no sabemos quién sos. (Mal nombrado: es 'no autenticado').

  • 403
    Forbidden

    Sabemos quién sos pero no podés. Autorización denegada.

  • 404
    Not Found

    No existe ese recurso (o no querés revelar que existe).

  • 405
    Method Not Allowed

    El recurso existe pero no acepta ese verbo (ej POST donde solo va GET).

  • 409
    Conflict

    Choca con el estado actual. Típico en ediciones concurrentes.

  • 418
    I'm a teapot

    Sí, es real. Broma del RFC 2324. No sirvas café con una tetera.

  • 422
    Unprocessable Entity

    Sintaxis OK pero la validación semántica falló.

  • 429
    Too Many Requests

    Frená. Estás pegándole de más (rate limiting).

  • 500
    Internal Server Error

    Reventó algo del lado del servidor. Es culpa tuya, no del cliente.

  • 502
    Bad Gateway

    Un proxy/gateway recibió basura del upstream.

  • 503
    Service Unavailable

    Caído o saturado. Probá más tarde (mandá Retry-After).

  • 504
    Gateway Timeout

    El upstream no respondió a tiempo.

Comprobalo en la terminal

vt@labs:~
# Solo el código de estado, nada más
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/no-existe

Quiz: clasificá rápido

Comprobá lo que entendiste

0 / 3 correctas

  1. 1. Tu request a la API responde 503. ¿Por dónde empezás?

  2. 2. Tenés un token válido pero un endpoint te devuelve 403. ¿Qué significa?

  3. 3. Pedís /usuarios/999 y te da 404, aunque sabés que el id existe. ¿Qué puede ser?

Lo que practicás en este lab

Llevátelo a tu repo si querés, pero no es obligatorio: es tu aprendizaje.

  • Captura del quiz con tu puntaje
  • Writeup de 3 líneas: un 4xx y un 5xx que viste en un proyecto y qué los causó

Reto

Pegале curl a tres endpoints (uno que exista, uno que no, y uno que requiera auth). Anotá el código de cada uno y clasificá: ¿4xx o 5xx? ¿de quién es la culpa?

Resolvelo y escribí dos líneas explicando qué pasó. Con eso lo fijás.

¿Hiciste el lab?

Si querés, guardá lo que hiciste (comandos, notas, un repo) para volver después. Y si encontrás un error o querés mejorar este lab, contribuí al repo. El progreso se guarda solo en tu navegador.