Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

El encabezado de respuesta de HTTP ETag es un identificador para una versión específica de un recurso.  Permite a la memoria caché ser más eficiente, y ahorra ancho de banda, en tanto que un servidor web no necesita enviar una respuesta completa si el contenido no ha cambiado.  Por otro lado, si el contenido cambió, los etags son útiles para ayudar a prevenir actualizaciones simultáneas de un recurso de sobre-escribirlo por otro ("colisiones en el aire").

Si el recurso en una URL dada cambia, un valor Etag debe ser generado.  De esta forma los Etags son muy similares a las huellas digitales y pueden también usarse para propósitos de rastreo por algunos servidores.  Un comparativo de ellos permite rápidamente determinar cuándo dos representaciones de un recurso son las mismas, pero podrían también configurarse para persistir indefinidamente por un servidor en rastreo.

 

 

Tipo de Encabezado Response header
Forbidden header name no

Sintaxis

ETag: W/"<valor_etag>"
ETag: "<valor_etag>"

Directivas

W/ Optional
'W/' (sensible a mayúsculas) indica que se usa un débil validador.  Los validadores débiles son fáciles de generar pero son menos útiles para comparativos.  Los validadores fuertes son ideales para comparativos pero pueden ser muy difíciles de generar eficientemente.  Los valores Etag débiles de dos representaciones de los mismos recursos podrían ser semánticamente equivalentes, pero no idénticos byte por byte.
"<valor_etag>"
Las Etiquetas de Entidad (ETags) representan de forma única a los recursos.  Son una cadena de caracteres ASCII puestas entre comillas dobles (Como "675af34563dc-tr34").  El método por el cual se generan los valores ETag no está especificado. Muchas veces, se usa una etiqueda del contenido, una etiqueta de la fecha y hora de la última modificación, o sólo una revisión.  Por ejemplo, MDN usa una etiqueda de dígitos hexadecimales para el contenido wiki.

Ejemplos

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ETag: W/"0815"

Evitando las colisiones en el aire

Con la ayuda del ETag y los encabezados If-Match se puede ser capaza de detectar las colisiones de edición en el aire.

Por ejemplo cuando se edita MDN, el contenido wiki actual es etiquetado y puesto en un Etag en la respuesta:

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Cuando se guarda los cambios de una página a una página wiki (datos posteados), la petición  POST contendrá el encabezado que contiene los valoresETag para revisar la frescura entre ellas.

If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Si las etiquetas no concuerdan, significa que el documento ha sido editado de por sí y se lanza un error  412 Precondition Failed.

Cacheo de los recursos invariados

Otro caso típico del uso del encabezado ETag es el cacheo de recursos que no han variado.  Si un usuario visita una URL dada nuevamente (la que tiene un conjunto ETag), y está viciado, es decir que es muy viejo para considerarlo usable, el cliente enviará el valor de su ETag a través de un campo de encabezado If-None-Match:

If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

El servidor compara el ETag del cliente (enviado con un If-None-Match) con el ETag para su versión actual del recurso y si ambos valores concuerdan (esto es, el recurso no ha cambiado), el servidor envió un estado 304 Not Modified, sin ningún cuerpo, lo cual le dice al cliente que la versión cacheada de la respuesta todavía es buena para usar (refrescar).

Especificaciones

Especificación Título
RFC 7232, section 2.3: ETag Protocolo de Transferencia por Hipertexto (HTTP/1.1): Peticiones Condicionales

Compatibilidad con Navegadores

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Soporte básico (Si) (Si) (Si) (Si) (Si) (Si)
FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Soporte básico (Si) (Si) (Si) (Si) (Si) (Si) (Si)

Vea también

Etiquetas y colaboradores del documento

 Colaboradores en esta página: edgarrod71
 Última actualización por: edgarrod71,