Informativos 1xx
Códigos 1xx
100Continue — el servidor recibió las cabeceras, el cliente debe enviar el cuerpo
101Switching Protocols — actualizando a WebSocket o HTTP/2
102Processing — el servidor recibió la solicitud, aún procesando (WebDAV)
103Early Hints — precargar recursos antes de la respuesta final
Nota de uso
# 100 Continue: client sends Expect header, waits for 100 curl -H "Expect: 100-continue" -d @large.json URL # 101: upgrade to WebSocket Connection: Upgrade / Upgrade: websocket
Éxito 2xx
Códigos 2xx
200OK — respuesta de éxito estándar
201Created — recurso creado exitosamente (POST/PUT)
202Accepted — solicitud recibida, procesando de forma asíncrona
203Non-Authoritative Info — transformada por un proxy
204No Content — éxito sin cuerpo de respuesta (DELETE)
205Reset Content — éxito, el cliente debe resetear el formulario
206Partial Content — solicitud de rango satisfecha
207Multi-Status — múltiples códigos de estado (WebDAV)
Uso en REST API
GET → 200Devolver recurso con cuerpo
POST → 201Recurso creado, incluir cabecera Location
PUT → 200/204Recurso actualizado (con/sin cuerpo)
DELETE → 204Eliminado, sin cuerpo devuelto
PATCH → 200Actualización parcial, devolver recurso modificado
Redirección 3xx
Códigos 3xx
300Multiple Choices — hay múltiples representaciones disponibles
301Moved Permanently — recurso movido, actualizar marcadores
302Found — redirección temporal (frecuentemente mal usado como 303)
303See Other — redirigir con GET después de POST
304Not Modified — usar versión en caché (ETag/If-Modified)
307Temporary Redirect — mismo método, ubicación temporal
308Permanent Redirect — mismo método, ubicación permanente
Comportamiento de redirección
301/308Permanente — los motores de búsqueda actualizan el índice
302/307Temporal — la URL original sigue siendo canónica
301/302Puede cambiar el método a GET en la redirección
307/308Debe preservar el método HTTP original
Error del cliente 4xx
Errores de cliente comunes
400Bad Request — sintaxis mal formada o parámetros inválidos
401Unauthorized — autenticación requerida o fallida
403Forbidden — autenticado pero sin permiso
404Not Found — el recurso no existe
405Method Not Allowed — método HTTP no soportado
406Not Acceptable — no puede satisfacer la cabecera Accept
408Request Timeout — el cliente tardó demasiado en enviar la solicitud
409Conflict — la solicitud entra en conflicto con el estado actual
Más errores de cliente
410Gone — recurso eliminado permanentemente (no solo faltante)
411Length Required — falta la cabecera Content-Length
412Precondition Failed — If-Match/If-Unmodified fallido
413Content Too Large — el cuerpo de la solicitud excede el límite
414URI Too Long — la URL excede el límite del servidor
415Unsupported Media Type — Content-Type no aceptado
422Unprocessable Content — sintaxis válida, errores semánticos
429Too Many Requests — límite de tasa excedido
Error del servidor 5xx
Códigos 5xx
500Internal Server Error — excepción no manejada en el servidor
501Not Implemented — el servidor no soporta el método
502Bad Gateway — el servidor upstream envió una respuesta inválida
503Service Unavailable — sobrecargado o en mantenimiento
504Gateway Timeout — el servidor upstream no respondió a tiempo
505HTTP Version Not Supported — versión no manejada
507Insufficient Storage — el servidor no puede almacenar la solicitud (WebDAV)
511Network Auth Required — se requiere login en portal cautivo
Estrategia de reintentos
500Reintentar con backoff; puede ser transitorio
502/504Reintentar — el problema upstream puede resolverse
503Verificar cabecera Retry-After antes de reintentar
501/505No reintentar — corregir la solicitud del cliente
Códigos comunes
Códigos más usados (de un vistazo)
200OK — todo funcionó
201Created — nuevo recurso creado
204No Content — éxito, cuerpo vacío
301Moved Permanently — actualizar URL
304Not Modified — usar caché
400Bad Request — corregir la solicitud
401Unauthorized — iniciar sesión primero
403Forbidden — permisos insuficientes
404Not Found — URL incorrecta o recurso eliminado
422Unprocessable — errores de validación
429Too Many Requests — reducir el ritmo
500Server Error — no es culpa del cliente
502Bad Gateway — fallo en proxy/upstream
503Unavailable — intentar más tarde
Referencia de cabeceras
Cabeceras de solicitud
AcceptTipos de media de respuesta deseados (p. ej. application/json)
AuthorizationCredenciales (Bearer token, Basic base64)
Content-TypeTipo de media del cuerpo de la solicitud
If-None-MatchCondicional: ETag para validación de caché
If-Modified-SinceCondicional: fecha para validación de caché
Cache-ControlDirectivas de caché (no-cache, max-age)
User-AgentCadena de identificación del cliente
Cabeceras de respuesta
Content-TypeTipo de media del cuerpo de la respuesta
LocationURL destino de redirección o recurso creado
ETagEtiqueta de entidad para validación de caché
Cache-ControlDirectivas de caché (max-age, no-store)
Retry-AfterTiempo de espera antes de reintentar (429/503)
WWW-AuthenticateEsquema de autenticación requerido (enviado con 401)
Set-CookieEstablecer cookie en el cliente
Patrones comunes
Flujo de caché
# First request — server returns ETag GET /api/data → 200, ETag: "abc123" # Subsequent request — conditional GET /api/data, If-None-Match: "abc123" → 304 Not Modified (use cache)
Flujo de autenticación
# Unauthenticated request GET /api/secret → 401, WWW-Authenticate: Bearer # With token GET /api/secret, Authorization: Bearer → 200 OK
Límite de tasa
# Rate limited response 429 Too Many Requests Retry-After: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1700000000
Negociación de contenido
# Client prefers JSON, accepts XML Accept: application/json, application/xml;q=0.9 # Server can't satisfy → 406 Not Acceptable # Server returns best match → 200 + Content-Type