Guía de herramienta

Cómo leer HTTP Status Codes

Los 5 grupos de códigos de estado HTTP, los más importantes de cada uno, cuándo aparecen y cómo manejarlos en tu código.

¿Qué son los HTTP Status Codes?

Cada respuesta HTTP incluye un código de estado de 3 dígitos que indica el resultado de la solicitud. El primer dígito define la categoría: 1xx informativos, 2xx éxito, 3xx redirecciones, 4xx errores del cliente, 5xx errores del servidor.

1xx
Informativos
2xx
Éxito
3xx
Redirecciones
4xx
Errores del cliente
5xx
Errores del servidor
1xx

Informativos

La solicitud fue recibida y el proceso continúa.

CódigoNombreDescripción
100ContinueEl servidor recibió la primera parte y el cliente puede continuar enviando.
101Switching ProtocolsEl servidor cambia de protocolo (ej. HTTP → WebSocket).
2xx

Éxito

La solicitud fue recibida, entendida y aceptada correctamente.

CódigoNombreDescripción
200OKÉxito estándar. La respuesta contiene el resultado solicitado.
201CreatedRecurso creado exitosamente. Típico en respuestas POST.
204No ContentÉxito pero sin cuerpo de respuesta. Típico en DELETE.
206Partial ContentEl servidor devuelve solo parte del recurso (descargas por rangos).
3xx

Redirecciones

Se necesita acción adicional del cliente para completar la solicitud.

CódigoNombreDescripción
301Moved PermanentlyLa URL del recurso cambió permanentemente. El cliente debe actualizar sus bookmarks.
302FoundRedirección temporal. El cliente debe seguir usando la URL original.
304Not ModifiedEl recurso no cambió desde la última petición. Usar la caché.
307Temporary RedirectComo 302 pero el método HTTP NO cambia en la redirección.
308Permanent RedirectComo 301 pero el método HTTP NO cambia en la redirección.
4xx

Errores del cliente

La solicitud tiene un error atribuible al cliente.

CódigoNombreDescripción
400Bad RequestLa sintaxis de la solicitud es inválida o los datos enviados son incorrectos.
401UnauthorizedRequiere autenticación. El cliente no está autenticado.
403ForbiddenEl cliente está autenticado pero no tiene permisos para el recurso.
404Not FoundEl recurso no existe en el servidor.
405Method Not AllowedEl método HTTP usado no está permitido para esta ruta.
409ConflictConflicto con el estado actual del recurso (ej. email duplicado).
422Unprocessable EntityLa estructura es correcta pero los datos fallan la validación.
429Too Many RequestsEl cliente superó el límite de solicitudes (rate limiting).
5xx

Errores del servidor

El servidor falló al procesar una solicitud válida.

CódigoNombreDescripción
500Internal Server ErrorError genérico del servidor. Revisar logs para más detalles.
502Bad GatewayEl servidor proxy recibió una respuesta inválida del servidor upstream.
503Service UnavailableEl servidor está temporalmente fuera de servicio (sobrecarga o mantenimiento).
504Gateway TimeoutEl servidor proxy no recibió respuesta a tiempo del servidor upstream.

Cómo manejarlos en código

Con fetch()

async function fetchData(url) {
  const res = await fetch(url);

  "color:rgba(255,255,255,0.35)">// fetch NO arroja error en 4xx/5xx — debes verificar res.ok
  if (!res.ok) {
    switch (res.status) {
      case 401:
        "color:rgba(255,255,255,0.35)">// Redirigir al login
        window.location.href = "/login";
        return;
      case 403:
        throw new Error("No tienes permisos para esta acción");
      case 404:
        throw new Error("Recurso no encontrado");
      case 429:
        throw new Error("Demasiadas solicitudes. Espera un momento.");
      default:
        throw new Error(`Error del servidor: ${res.status}`);
    }
  }

  return res.json();
}

Con axios

import axios from "axios";

"color:rgba(255,255,255,0.35)">// axios SÍ arroja error automáticamente en 4xx/5xx
axios.interceptors.response.use(
  (response) => response,
  (error) => {
    const status = error.response?.status;

    if (status === 401) window.location.href = "/login";
    if (status === 403) console.error("Acceso denegado");
    if (status === 429) console.warn("Rate limit alcanzado");
    if (status >= 500) console.error("Error del servidor:", status);

    return Promise.reject(error);
  }
);

"color:rgba(255,255,255,0.35)">// Uso
try {
  const { data } = await axios.get("/api/users");
} catch (error) {
  "color:rgba(255,255,255,0.35)">// El interceptor ya maneja el código de estado
  console.error("Error:", error.message);
}

Herramienta relacionada

Referencia HTTP Status

Busca cualquier código HTTP, ve su descripción, ejemplos de uso y casos reales. Ideal para tener a mano al depurar APIs.

Abrir referencia HTTP Status →