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
- Escribe un código, un nombre o una palabra («redirección», «límite») en el buscador.
- Usa los botones de clase para ver solo los códigos 2xx, 3xx, 4xx o 5xx.
- 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.