Saltar al contenido

ETag

Un ETag identifica una versión concreta de la representación de un recurso HTTP y permite lecturas o cambios condicionales.

También conocido comoEntity tag
APIs y contratos de datos

Un entity tag es un validador HTTP en la cabecera de respuesta ETag. Identifica una versión concreta de la representación enviada. Su valor no tiene que ser un hash del contenido y el cliente debe tratarlo como un identificador opaco, no como un número de versión ordenable.

Dos solicitudes condicionales

Una vista de proyecto ficticia responde con ETag: "r7". En un GET posterior con If-None-Match: "r7", el servidor puede devolver 304 sin reenviar el cuerpo si la representación no ha cambiado. Si ha cambiado, se transfiere la nueva representación con su nuevo validador.

En una modificación, el mismo identificador tiene otra función: una edición con If-Match: "r7" encuentra la representación ahora vigente "r8". La precondición incumplida produce 412 en lugar de sobrescribir el estado más reciente con la edición antigua. La aplicación debe gestionar el conflicto de forma visible. Comprobación y cambio deben funcionar correctamente juntos en el servidor; enviar una cabecera no protege por sí solo.

If-Match usa una comparación fuerte. Un validador débil con el prefijo W/ no satisface esa comparación. La lectura de caché y el control de escritura utilizan, por tanto, condiciones diferentes. Un ETag tampoco sustituye la comprobación de autorización ni decide quién puede ver o cambiar los datos.

Fuentes