W3docs

Mensajes de Estado HTTP

Referencia clara de códigos de estado HTTP (1xx–5xx) con los más comunes explicados y un ejemplo fetch() que ramifica según response.status.

Cada vez que un navegador carga una página, envía un formulario o tu JavaScript realiza una llamada fetch(), el servidor responde con un código de estado HTTP de tres dígitos. Este código le indica al cliente si la solicitud fue exitosa, fue redirigida, falló por algo que hizo el cliente o falló en el servidor. El navegador lo utiliza automáticamente — sigue las redirecciones, muestra su propia página de error para algunos códigos y reutiliza el contenido en caché para otros — pero como desarrollador también lees estos códigos directamente: un formulario se envía y ramificas según la respuesta, o un fetch() se resuelve y compruebas response.ok (que simplemente significa "estado en el rango 200–299").

Aquí puedes encontrar la lista de códigos de estado de respuesta del Protocolo de Transferencia de Hipertexto (HTTP). Estos códigos responden a la solicitud que un cliente hace a un servidor — ya sea que esa solicitud use GET, POST u otro método HTTP — y se agrupan en 5 clases según su primer dígito. Conocerlos te ayuda a depurar enlaces rotos, URLs incorrectas, envíos de formularios fallidos y respuestas de API inesperadas. Repasemos cada clase:

Peligro

Si recibes una respuesta que no está incluida en esta lista, significa que es una respuesta no estándar, posiblemente personalizada para el software del servidor.

Manejo de códigos de estado en JavaScript

Cuando envías un formulario o llamas a una API con fetch(), la solicitud tiene éxito (la promesa se resuelve) incluso cuando el servidor devuelve un error 4xx o 5xx — un 404 o 500 sigue siendo una respuesta HTTP válida, no un error de red. Por eso debes inspeccionar el estado tú mismo. El atajo conveniente es response.ok, que es true solo para el rango 200–299; para cualquier otro caso, ramificas según response.status para reaccionar apropiadamente:

const form = document.querySelector("#signup");

form.addEventListener("submit", async (event) => {
  event.preventDefault();

  const response = await fetch("/api/signup", {
    method: "POST",
    body: new FormData(form),
  });

  if (response.ok) {
    // 200–299: success
    window.location.href = "/welcome";
  } else if (response.status === 401) {
    showMessage("Please log in first.");
  } else if (response.status === 422) {
    // Validation errors returned as JSON
    const data = await response.json();
    showMessage(data.error);
  } else if (response.status === 429) {
    // Rate limited — respect the Retry-After header
    const wait = response.headers.get("Retry-After");
    showMessage(`Too many attempts. Try again in ${wait}s.`);
  } else if (response.status >= 500) {
    showMessage("Server error — please try again later.");
  } else {
    showMessage(`Unexpected error (${response.status}).`);
  }
});

Ten en cuenta que fetch() solo rechaza ante problemas de red genuinos (sin conexión, bloqueo CORS, fallo de DNS), por lo que envolver la llamada en try…catch maneja esos casos, mientras que el if/else anterior maneja el estado HTTP en sí.

Información

Los códigos más comunes para conocer primero. Si solo vas a memorizar unos pocos, que sean estos: 200 (OK), 301 (Movido Permanentemente), 302 (Encontrado / redirección temporal), 401 (No Autorizado), 403 (Prohibido), 404 (No Encontrado) y 500 (Error Interno del Servidor). Cubren la gran mayoría de lo que verás en las herramientas de desarrollo del navegador y en los registros del servidor.

1xx: Información

Código de estadoMensajeDescripción
100ContinueSignifica que el servidor ha recibido los encabezados de la solicitud y el cliente debe continuar enviando el cuerpo de la solicitud.
101Switching ProtocolsSignifica que el cliente, que realizó la solicitud, ha pedido al servidor que cambie de protocolo (por ejemplo, para actualizar a una conexión WebSocket).
102ProcessingUn código WebDAV que indica que el servidor ha aceptado la solicitud pero aún no la ha completado; se utiliza para evitar que el cliente exceda el tiempo de espera en una operación prolongada.
103Early HintsDefinido en RFC 8297. Permite al servidor enviar algunos encabezados de respuesta (como encabezados Link que precargan recursos) antes de la respuesta final, para que el navegador pueda comenzar a obtener recursos antes.

2xx: Exitoso

Código de estadoMensajeDescripción
200OKSignifica que la solicitud es correcta. Es la respuesta estándar para solicitudes HTTP exitosas.
201CreatedSignifica que la solicitud se ha completado y se ha creado un nuevo recurso.
202AcceptedSignifica que la solicitud ha sido aceptada para su procesamiento, pero el procesamiento continúa.
203Non-Authoritative InformationSignifica que la solicitud se ha procesado correctamente, pero devuelve información que puede provenir de otra fuente.
204No ContentSignifica que la solicitud se ha procesado correctamente, pero no devuelve ningún contenido.
205Reset ContentSignifica que la solicitud ha sido procesada, pero no devuelve ningún contenido y requiere que el solicitante restablezca la vista del documento.
206Partial ContentSignifica que el servidor solo entrega una parte del recurso, a causa de un encabezado de rango enviado por el cliente.

3xx: Redirección

Código de estadoMensajeDescripción
300Multiple ChoicesIndica múltiples opciones para el recurso que el cliente puede seguir.
301Moved PermanentlySignifica que la página se ha movido permanentemente a una nueva URL. Los navegadores y motores de búsqueda actualizan sus referencias, por lo que un 301 transfiere la equidad de enlace a la nueva URL y es la opción correcta para redirecciones favorables al SEO.
302FoundSignifica que la página solicitada se ha movido temporalmente a una nueva URL. Los motores de búsqueda mantienen indexada la URL original, por lo que debes usar 302 (no 301) cuando el traslado es de corta duración, como durante mantenimiento o pruebas A/B.
303See OtherSignifica que la respuesta a la solicitud se puede encontrar en otra URL, que el cliente debe recuperar con GET. Se utiliza habitualmente después de un POST de formulario para redirigir a una página de resultado.
304Not ModifiedSignifica que el recurso solicitado no ha sido modificado desde la última vez que se almacenó en caché. El servidor no envía cuerpo, por lo que el navegador reutiliza su copia en caché — esto ahorra ancho de banda y acelera las visitas repetidas.
307Temporary RedirectSignifica que la página solicitada se ha movido temporalmente a una nueva URL. A diferencia del 302, el cliente debe mantener el método de solicitud original (un POST sigue siendo un POST).
308Permanent RedirectSignifica que el recurso solicitado se ha movido permanentemente a una nueva URL.

Los códigos no listados aquí (como el 305 y el 306) están obsoletos, son raros o son específicos de extensiones.

4xx: Error del Cliente

Código de estadoMensajeDescripción
400Bad RequestSignifica que la solicitud no se puede completar debido a sintaxis incorrecta o datos no válidos.
401UnauthorizedSignifica que el cliente no está autenticado — faltan credenciales válidas o son incorrectas. El servidor aún no sabe quién eres, por lo que te pide que inicies sesión. (Nota: el nombre dice "No Autorizado" pero realmente significa "No Autenticado".)
402Payment RequiredEstá reservado para uso futuro.
403ForbiddenSignifica que el cliente está autenticado pero no autorizado — el servidor sabe quién eres, pero no tienes permiso para acceder a este recurso. A diferencia del 401, enviar credenciales de nuevo no ayudará.
404Not FoundSignifica que la página solicitada no se puede encontrar en este momento, pero puede estar disponible de nuevo en el futuro.
405Method Not AllowedSignifica que la solicitud se realizó a una página que usa un método de solicitud no compatible con esa página.
406Not AcceptableSignifica que el servidor solo puede generar una respuesta que el cliente no acepta.
407Proxy Authentication RequiredSignifica que el cliente primero debe autenticarse con el proxy.
408Request TimeoutSignifica que el servidor agotó el tiempo de espera de la solicitud.
409ConflictSignifica que la solicitud no se puede completar debido a un conflicto en la solicitud.
410GoneSignifica que la página solicitada ya no está disponible.
411Length RequiredSignifica que la longitud del contenido no está definida y el servidor no aceptará la solicitud sin ella.
412Precondition FailedSignifica que una condición previa dada en la solicitud es evaluada como falsa por el servidor.
413Request Entity Too LargeSignifica que la entidad de la solicitud es demasiado grande y por eso el servidor no aceptará la solicitud.
414Request-URI Too LongSignifica que la URL es demasiado larga y por eso el servidor no aceptará la solicitud. Ocurre cuando se convierte una solicitud POST en una solicitud GET con mucha información en la consulta.
415Unsupported Media TypeSignifica que el tipo de medio no es compatible y por eso el servidor no aceptará la solicitud.
416Requested Range Not SatisfiableSignifica que el cliente solicitó una parte del archivo pero el servidor no puede suministrar esa parte.
417Expectation FailedSignifica que el servidor no puede cumplir los requisitos del campo de encabezado de solicitud Expect.
418I'm a TeapotUn código de broma del RFC 2324 (el Protocolo de Control de Cafetera de Hipertexto). No es un error real, pero algunas APIs lo devuelven deliberadamente, por lo que puedes encontrarlo en la práctica.
422Unprocessable ContentSignifica que la solicitud estaba bien formada pero contiene errores semánticos que impiden su procesamiento — habitualmente devuelto por APIs cuando los datos de un formulario o JSON fallan la validación.
429Too Many RequestsSignifica que el cliente ha enviado demasiadas solicitudes en un período de tiempo determinado ("limitación de velocidad"). La respuesta a menudo incluye un encabezado Retry-After que indica cuánto tiempo esperar antes de volver a intentarlo.
451Unavailable For Legal ReasonsSignifica que el recurso solicitado no está disponible por motivos legales, como censura o una orden de eliminación (el número hace referencia a la novela Fahrenheit 451).

Los códigos no listados aquí (como el 419, el 420 y varios en el rango 423–431) son raros, específicos de frameworks o no estándar. Algunos — como el 421 (Solicitud Mal Dirigida, usado en HTTP/2) y el 451 anterior — están estandarizados pero son poco frecuentes en el trabajo cotidiano.

5xx: Error del Servidor

Código de estadoMensajeDescripción
500Internal Server ErrorEs un error genérico y los usuarios reciben este mensaje cuando no hay un mensaje específico más adecuado.
501Not ImplementedSignifica que el servidor no reconoce el método de solicitud o carece de la capacidad para completar la solicitud.
502Bad GatewaySignifica que un servidor que actúa como puerta de enlace, proxy inverso o balanceador de carga recibió una respuesta no válida del servidor de aplicaciones upstream — a menudo porque ese backend falló o devolvió una salida mal formada.
503Service UnavailableSignifica que el servidor no puede manejar temporalmente la solicitud (sobrecargado o inactivo por mantenimiento). Al igual que el 429, la respuesta puede incluir un encabezado Retry-After que indica a los clientes y rastreadores cuándo volver a intentarlo, por eso el 503 es el código seguro para SEO durante el tiempo de inactividad planificado.
504Gateway TimeoutSignifica que un servidor que actúa como puerta de enlace, proxy inverso o balanceador de carga no recibió respuesta a tiempo del servidor upstream. Apunta a un backend lento o sin respuesta, no al proxy en sí.
505HTTP Version Not SupportedSignifica que la versión del protocolo HTTP utilizada en la solicitud no es compatible con el servidor.
507Insufficient StorageUn código WebDAV que indica que el servidor no puede almacenar la representación necesaria para completar la solicitud (no tiene espacio de almacenamiento suficiente).
508Loop DetectedUn código WebDAV que indica que el servidor detectó un bucle infinito al procesar la solicitud y lo terminó.
511Network Authentication RequiredSignifica que el cliente necesita autenticarse para obtener acceso a la red (a menudo se ve detrás de un portal cautivo Wi-Fi).

Capítulos Relacionados

El estado que devuelve un servidor a menudo depende de la propia solicitud. Para profundizar, consulta:

Práctica

Práctica
Un usuario autenticado solicita una página que no tiene permitido ver. ¿Qué código de estado debe devolver el servidor?
Un usuario autenticado solicita una página que no tiene permitido ver. ¿Qué código de estado debe devolver el servidor?
Práctica
Mueves permanentemente una página a una nueva URL y quieres que los motores de búsqueda transfieran las señales de posicionamiento a la nueva dirección. ¿Qué código de redirección debes usar?
Mueves permanentemente una página a una nueva URL y quieres que los motores de búsqueda transfieran las señales de posicionamiento a la nueva dirección. ¿Qué código de redirección debes usar?
Práctica
Un POST de formulario tiene éxito y el servidor quiere indicar al navegador que limpie los campos del formulario sin enviar ningún contenido de página nuevo. ¿Qué código de estado es el más adecuado?
Un POST de formulario tiene éxito y el servidor quiere indicar al navegador que limpie los campos del formulario sin enviar ningún contenido de página nuevo. ¿Qué código de estado es el más adecuado?
Was this page helpful?