Skip to main content

📝 Error 428 – Se requiere precondición (Precondition Required)

El error 428 indica que el servidor exige que la solicitud incluya una precondición, normalmente con cabeceras como:

  • If-Match

  • If-None-Match

  • If-Unmodified-Since

  • If-Modified-Since

Estas precondiciones permiten que el servidor evite modificaciones peligrosas, inconsistencias o ediciones simultáneas.
Si el cliente no envía estas precondiciones → el servidor rechaza la solicitud con un 428.

Es muy usado en APIs REST, sistemas con control de versiones, ediciones colaborativas y recursos críticos.


Causas más comunes

  • 📌 La solicitud intenta modificar un recurso sin validar si fue cambiado antes.

  • 🔐 El servidor requiere un ETag (If-Match) para evitar sobrescrituras.

  • 📅 No se incluyó una cabecera condicional obligatoria.

  • 🧩 La API protege recursos sensibles y exige control de concurrencia.

  • 🛑 El servidor impide actualizaciones sin verificar precondiciones.

  • ⚙️ El cliente no está enviando los encabezados adecuados.


🔧 Soluciones recomendadas

1️⃣ Enviar el encabezado If-Match con el ETag del recurso

Ejemplo:

El servidor devuelve este ETag:


ETag: "v23-t8kd9"

Tu actualización debe enviarlo así:


If-Match: "v23-t8kd9"

Si no lo envías → 428.


2️⃣ Usar If-Unmodified-Since

El servidor solo aceptará la actualización si el recurso no ha cambiado desde la fecha dada.

Ejemplo:


If-Unmodified-Since: Tue, 12 Nov 2024 10:00:00 GMT

3️⃣ Enviar If-None-Match para evitar duplicados

Útil para creación de recursos:


If-None-Match: *

Esto evita que se creen duplicados accidentales.


4️⃣ Actualizar primero el recurso

Antes de modificar:

Haz un GET para obtener:

  • Estado actual

  • ETag

  • Fecha de última modificación

Luego reintenta la acción con las precondiciones.


5️⃣ Corregir tu cliente o librería HTTP

Ejemplos:

En Axios:


axios.put(url, body, { headers: { "If-Match": etag } });

En cURL:


curl -X PUT -H "If-Match: \"v23\"" -d '{"nombre":"nuevo"}' https://api.com/resource

En Fetch:


fetch(url, { method: "PUT", headers: { "If-Match": etag }, body: JSON.stringify(data) });

6️⃣ Revisar documentación de la API

Muchas APIs definen claramente:

  • Qué precondición es obligatoria

  • Qué encabezado enviar

  • Por qué seguridad se requiere

Ejemplos: APIs de Google, Microsoft, GitHub, Stripe, etc.


🔐 Consejo Pro

El error 428 existe para prevenir pérdidas de datos.

Es una medida de seguridad contra:

  • Ediciones simultáneas

  • Sobrescrituras accidentales

  • Condiciones de carrera (race conditions)

  • Actualizaciones peligrosas sin control de versiones

Siempre usa ETags y precondiciones cuando modifiques recursos importantes.