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.
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] - 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
# 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. Tu request a la API responde 503. ¿Por dónde empezás?
-
2. Tenés un token válido pero un endpoint te devuelve 403. ¿Qué significa?
-
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.