Guía rápida de códigos de estado HTTP

Los códigos de estado HTTP que de verdad encontrará, por clases, con los pares que se confunden (401 frente a 403, 301 frente a 308) y consejos para una API.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Toda respuesta HTTP empieza con un código de estado de tres dígitos. El primer dígito es la clase; los otros dos la precisan. Esta página reúne los códigos que más verá. Para todos ellos, con búsqueda, use el Búsqueda de Códigos de Estado HTTP.

1xx Informativos

Código Nombre Significado
100 Continue El cliente puede seguir enviando el cuerpo de la petición
101 Switching Protocols Cambio a otro protocolo, como WebSocket

2xx Éxito

Código Nombre Significado
200 OK La petición funcionó y la respuesta lleva el resultado
201 Created Se creó algo nuevo (típico de POST)
202 Accepted Aceptada para procesar, aún sin terminar
204 No Content Éxito sin cuerpo que devolver (típico de DELETE)
206 Partial Content Solo el rango de bytes pedido (descargas reanudables, vídeo)

3xx Redirección

Código Nombre Significado
301 Moved Permanently Movido de forma permanente: actualice enlaces y marcadores
302 Found Temporalmente en otro sitio: siga usando la URL original
303 See Other Vaya a hacer GET a otra URL (tras un POST)
304 Not Modified No modificado: use su copia en caché
307 Temporary Redirect Redirección temporal que conserva método y cuerpo
308 Permanent Redirect Redirección permanente que conserva método y cuerpo

4xx Error del cliente

Código Nombre Significado
400 Bad Request La petición está mal formada o es inválida
401 Unauthorized No autenticado: faltan credenciales o son incorrectas
403 Forbidden Autenticado pero sin permiso para hacerlo
404 Not Found No existe nada en esta URL
405 Method Not Allowed La URL existe pero no para este método
406 Not Acceptable No puede producir una respuesta que el cliente acepte
408 Request Timeout El servidor se cansó de esperar la petición
409 Conflict Entra en conflicto con el estado actual (colisión de edición, duplicado)
410 Gone Desaparecido para siempre: más fuerte que 404
413 Content Too Large El cuerpo de la petición es demasiado grande
414 URI Too Long La URL es demasiado larga
415 Unsupported Media Type El formato del cuerpo (Content-Type) no es compatible
416 Range Not Satisfiable No se puede servir el rango de bytes pedido
418 I'm a Teapot El servidor es una tetera (una broma del 1 de abril, RFC 2324)
422 Unprocessable Content Bien formada pero semánticamente inválida (habitual en APIs)
429 Too Many Requests Demasiadas peticiones: límite de tasa, revise Retry-After
431 Request Header Fields Too Large Las cabeceras de la petición son demasiado grandes
451 Unavailable For Legal Reasons Bloqueado por razones legales

5xx Error del servidor

Código Nombre Significado
500 Internal Server Error Un fallo genérico del servidor
501 Not Implemented El servidor no admite esta función o método
502 Bad Gateway Una pasarela o proxy recibió una respuesta inválida de origen
503 Service Unavailable No disponible temporalmente (sobrecarga, mantenimiento)
504 Gateway Timeout Una pasarela o proxy agotó el tiempo esperando al origen
505 HTTP Version Not Supported La versión de HTTP no es compatible

Pares fáciles de confundir

  • 401 frente a 403. 401 significa «no sé quién es usted» (inicie sesión, o su token es incorrecto o ha caducado). 403 significa «sé quién es usted y la respuesta es no».
  • 301, 302, 307 y 308. El par permanente es 301 y 308; el temporal es 302 y 307. Los más nuevos 307 y 308 garantizan que el método y el cuerpo se repiten sin cambios, mientras que clientes antiguos pueden convertir un POST con 301 o 302 en un GET.
  • 404 frente a 410. Ambos significan «aquí no está». 410 indica que se eliminó a propósito y no volverá, lo que ayuda a los buscadores a olvidar la URL antes.
  • 502, 503 y 504. 502: el servidor de origen respondió mal. 503: el servicio está caído o sobrecargado, a propósito o sin querer. 504: el servidor de origen no respondió a tiempo.
  • 400 frente a 422. 400 es para peticiones que el servidor no puede interpretar; 422 para las que interpretó bien pero no puede aceptar, como un JSON válido con un correo inválido.

Elegir un código para una API

  • Devuelva 200 con cuerpo en lecturas y actualizaciones, 201 con cabecera Location en creaciones y 204 cuando no hay nada que devolver.
  • Use 404 para un recurso inexistente y 409 para un conflicto, no 400 para todo.
  • Use 401 solo con un desafío de autenticación y 403 para problemas de permisos.
  • Añada Retry-After a 429 y 503 para que los clientes sepan cuándo reintentar.
  • No esconda errores tras un 200: las herramientas de monitorización, las cachés y los clientes dependen del código de estado.

Lectura relacionada: HTTP, Redirección, Limitación de tasa (rate limiting) y Guía rápida de cabeceras HTTP.

Pruebe estas herramientas

Véase también

  • Glosario HTTP
    HTTP (Hypertext Transfer Protocol) es el protocolo que usan navegadores y servidores para solicitar y enviar páginas web, archivos y datos.
  • Glosario Redirección
    Una redirección es una respuesta del servidor que envía al navegador a otra URL, usando un código de estado 3xx y una cabecera Location.
  • Glosario Limitación de tasa (rate limiting)
    La limitación de tasa restringe cuántas peticiones puede hacer un cliente a un servicio en un tiempo dado.
  • Guía rápida Guía rápida de cabeceras HTTP
    Cabeceras de petición y respuesta, directivas de Cache-Control, cabeceras de seguridad, atributos de cookie y cabeceras CORS.
AdSense Placeholder
Slot: footer_leaderboard