Saltar al contenido
en es

Códigos de estado HTTP

Todos los códigos de estado HTTP registrados en una lista con buscador, cada uno con una explicación clara y una nota sobre cuándo usarlo en tu API o sitio.

Se ejecuta en tu navegador: no se sube nada.

Ningún código coincide con la búsqueda.

100 Continuar #100

El servidor recibió las cabeceras; el cliente puede enviar el cuerpo. Se usa con Expect: 100-continue antes de una subida grande.

101 Cambio de protocolo #101

El servidor acepta cambiar de protocolo, por ejemplo a WebSocket tras una petición Upgrade.

102 Procesando #102

WebDAV: el servidor sigue trabajando en una petición larga y aún no tiene respuesta.

103 Pistas tempranas #103

Envía cabeceras Link antes de la respuesta final para que el navegador precargue CSS o scripts mientras el servidor sigue trabajando.

200 OK #200

La petición funcionó. GET devuelve el recurso, POST devuelve el resultado de la acción. Es el código de éxito por defecto.

201 Creado #201

Se creó un recurso nuevo, normalmente tras POST o PUT. Envía su dirección en la cabecera Location.

202 Aceptado #202

La petición se aceptó pero se procesará más tarde (un trabajo en cola). Indica dónde consultar el resultado.

203 Información no autoritativa #203

La respuesta viene de un proxy que modificó la del origen. Se usa muy poco.

204 Sin contenido #204

Éxito sin cuerpo: un DELETE, o un PUT/PATCH sin nada que devolver. No envíes cuerpo.

205 Restablecer contenido #205

Éxito; el cliente debe restablecer el formulario o la vista que envió la petición. Raro.

206 Contenido parcial #206

Devuelve solo el rango de bytes pedido con la cabecera Range. Se usa para saltar en vídeos y reanudar descargas.

207 Multiestado #207

WebDAV: el cuerpo contiene varios códigos de estado, uno por subpetición.

208 Ya informado #208

WebDAV: los miembros de un enlace ya se listaron antes en la respuesta.

226 IM usado #226

La respuesta es el resultado de una o más manipulaciones de instancia (codificación delta). Muy raro.

300 Múltiples opciones #300

Existen varias representaciones del recurso y el cliente debe elegir. Casi no se usa.

301 Movido permanentemente #301

La URL cambió para siempre. Navegadores y buscadores actualizan los enlaces. Un POST puede reenviarse como GET; usa 308 para mantener el método.

302 Encontrado #302

Redirección temporal. Los navegadores pueden cambiar POST a GET. Mejor 303 o 307 para ser explícito.

303 Ver otro #303

Tras un POST, redirige al cliente a una página con GET (patrón Post/Redirect/Get).

304 No modificado #304

La copia en caché sigue siendo válida (respuesta a If-None-Match o If-Modified-Since). Sin cuerpo.

305 Usar proxy #305

Obsoleto: hay que acceder al recurso a través de un proxy. No lo uses.

307 Redirección temporal #307

Redirección temporal que mantiene el método y el cuerpo (un POST sigue siendo POST).

308 Redirección permanente #308

Como 301, pero el método y el cuerpo no deben cambiar. Úsalo para mover un endpoint de API de forma definitiva.

400 Petición incorrecta #400

La petición está mal formada: sintaxis inválida, JSON incorrecto, parámetro ausente. Explica el fallo en el cuerpo.

401 No autorizado #401

El cliente no está autenticado (credenciales ausentes o inválidas). Aunque diga «autorizado», trata de la identidad. Envía WWW-Authenticate.

402 Pago requerido #402

Reservado para sistemas de pago. Algunas API lo usan cuando un límite del plan o una factura impagada bloquea la petición.

403 Prohibido #403

El cliente es conocido pero no tiene permiso para hacerlo. Volver a autenticarse no ayuda.

404 No encontrado #404

No hay nada en esta URL. También se usa para ocultar que un recurso existe.

405 Método no permitido #405

La URL existe pero no para este método (POST en un endpoint de solo lectura). Envía una cabecera Allow.

406 No aceptable #406

El servidor no puede generar una respuesta que cumpla las cabeceras Accept (tipo, idioma, codificación).

407 Autenticación de proxy requerida #407

Como 401, pero el cliente debe autenticarse primero con el proxy.

408 Tiempo de espera agotado #408

El servidor dejó de esperar a que el cliente terminara de enviar la petición.

409 Conflicto #409

La petición choca con el estado actual: valor único duplicado, conflicto de edición, versión incorrecta.

410 Desaparecido #410

El recurso existía y se eliminó a propósito, para siempre. Indica a los buscadores que lo olviden antes que con un 404.

411 Longitud requerida #411

El servidor necesita una cabecera Content-Length y la petición no la trae.

412 Precondición fallida #412

Una condición de If-Match o If-Unmodified-Since era falsa. Se usa para el bloqueo optimista.

413 Contenido demasiado grande #413

El cuerpo de la petición supera lo que permite el servidor (límite de subida). En especificaciones antiguas se llamaba Payload Too Large.

414 URI demasiado larga #414

La URL es más larga de lo que acepta el servidor. Mueve los datos al cuerpo de un POST.

415 Tipo de medio no soportado #415

El Content-Type del cuerpo no está soportado, por ejemplo XML enviado a una API solo JSON.

416 Rango no satisfactorio #416

El Range pedido queda fuera del tamaño del recurso.

417 Expectativa fallida #417

El servidor no puede cumplir la cabecera Expect (por ejemplo Expect: 100-continue).

418 Soy una tetera #418

Una broma del 1 de abril del RFC 2324. Algunos servicios lo usan a propósito para rechazar bots.

421 Petición mal dirigida #421

La petición llegó a un servidor que no puede responder por este host (reutilización de conexión HTTP/2).

422 Contenido no procesable #422

La sintaxis es correcta pero los datos no pasan la validación. El código habitual para errores de validación de formularios y API.

423 Bloqueado #423

WebDAV: el recurso está bloqueado.

424 Dependencia fallida #424

WebDAV: la petición falló porque falló otra anterior de la que depende.

425 Demasiado pronto #425

El servidor no arriesga procesar una petición que podría repetirse (datos tempranos de TLS).

426 Actualización requerida #426

El cliente debe cambiar a otro protocolo (ver la cabecera Upgrade), por ejemplo a TLS.

428 Precondición requerida #428

El servidor exige una petición condicional (If-Match) para evitar pérdidas de actualizaciones.

429 Demasiadas peticiones #429

Se alcanzó el límite de peticiones. Añade Retry-After para que los clientes sepan cuándo reintentar.

431 Cabeceras de petición demasiado grandes #431

Una cabecera, o todas juntas, son demasiado grandes (a menudo por demasiadas cookies).

451 No disponible por razones legales #451

El acceso está bloqueado por ley o por orden judicial. Indica la autoridad en una cabecera Link.

500 Error interno del servidor #500

Fallo genérico del servidor: excepción no controlada o error de programa. Regístralo y nunca muestres la traza a los usuarios.

501 No implementado #501

El servidor no soporta el método o la función en absoluto.

502 Puerta de enlace incorrecta #502

Una pasarela o proxy (nginx, un balanceador) recibió una respuesta inválida del servidor de origen (PHP-FPM, aplicación).

503 Servicio no disponible #503

El servidor está sobrecargado o en mantenimiento. Añade Retry-After. Es el código correcto para una página de mantenimiento planificado.

504 Tiempo de espera de la pasarela agotado #504

Una pasarela o proxy esperó demasiado a que respondiera el servidor de origen.

505 Versión HTTP no soportada #505

El servidor no soporta la versión de HTTP usada en la petición.

506 La variante también negocia #506

Error de configuración en la negociación transparente de contenido. Muy raro.

507 Almacenamiento insuficiente #507

WebDAV: el servidor no tiene espacio para guardar el recurso.

508 Bucle detectado #508

WebDAV: el servidor encontró un bucle infinito al procesar la petición.

510 No extendido #510

La petición necesita más extensiones que el servidor no soporta. Raro.

511 Autenticación de red requerida #511

El cliente debe iniciar sesión en la red primero, como en el portal cautivo de un wifi de hotel o aeropuerto.

Cómo se usa

  1. Escribe un código, un nombre o una palabra («redirección», «límite») en el buscador.
  2. Usa los botones de clase para ver solo los códigos 2xx, 3xx, 4xx o 5xx.
  3. Cada código tiene su propio enlace (por ejemplo #404): compártelo o guárdalo en favoritos.

Preguntas frecuentes

¿Qué significan los primeros dígitos?

1xx: informativo. 2xx: éxito. 3xx: redirección. 4xx: el cliente cometió un error. 5xx: falló el servidor.

¿401 o 403?

Usa 401 cuando el cliente no ha iniciado sesión o las credenciales son incorrectas; usa 403 cuando ha iniciado sesión pero no tiene permiso.

¿301, 302, 307 o 308?

301 y 308 son permanentes; 302 y 307 son temporales. 307 y 308 mantienen el método y el cuerpo de la petición; con 301 y 302 los navegadores pueden convertir un POST en GET.

¿400 o 422?

Usa 400 cuando la petición no se puede interpretar, y 422 cuando está bien formada pero los valores no pasan la validación. Muchas API usan 422 para errores de validación; Laravel lo hace.

¿Qué código debe devolver una página de mantenimiento?

503 con una cabecera Retry-After, para que los buscadores sepan que la caída es temporal y no eliminen tus páginas.