Cuándo usar y no usar ETags

9

Estaba mirando nuestro sitio en WebPageTest.org y una de sus recomendaciones para acelerar un sitio web es:

Los encabezados de ETag generalmente no deben usarse a menos que tenga una razón explícita para necesitarlos

Me preguntaba qué significa esto. ¿Significa que el contenido estático que sabe que no cambiará no debería tenerlos, o significa que el contenido que sabe que cambiará regularmente no debería tenerlos, o significa que no debería usarlos en general a menos que tenga un Necesidad específica.

Si es lo último, ¿cuándo es el momento adecuado para usarlos? Gracias por cualquier ayuda.

Django Reinhardt
fuente

Respuestas:

8

Los ETag son una alternativa (pero se pueden usar en combinación con) "Último tiempo modificado" para determinar la validación de la memoria caché.

El cliente puede enviar una precondición como if-coincide o if-none-coincide según la ETag. Esto no es solo para las solicitudes GET (que es lo que hace webpagetest.org), puede usar "actualización oportunista" para que una solicitud PUT tenga una condición previa y no realice la operación de actualización si el recurso se ha actualizado desde que ETag se actualizó última adquirida.

En pocas palabras: presiona editar en una página en su CMS, su amigo presiona editar en una página en su CMS, su amigo realiza su edición y presiona guardar y finalmente presiona guardar, sin un encabezado ETag o Content-MD5 HTTP que necesitaría para reinventar la rueda para evitar que ocurran problemas (como limpiar los cambios de tus amigos), la solución ya es parte del protocolo HTTP y, por lo tanto, tiene sentido usarlo.

En general, estoy de acuerdo con AOL (que ejecuta webpagetest.org) en su consejo de "talla única": es mejor no obstruir los encabezados HTTP con cadenas crípticas (los ETags generalmente no son bonitos o legibles para humanos) cuando hay un segundo de diferencia ( que Last-Modified-Time puede detectar) lo hará para el trabajo en cuestión.

Si una página se actualiza varias veces por segundo y necesita absolutamente que se muestre la última versión más precisa, puede experimentar con otras soluciones que no sean HTTP GET o simplemente usar ETags.

Tenga cuidado de que sus ETags no incluyan información por sistema de archivos, por cambio de configuración del servidor, etc. (como inodos, que es el valor predeterminado en Apache); de lo contrario, tendrá problemas cuando haya dos servidores (los ETag de cada uno no coincidirán).

Metalshark
fuente
Está bien. Hay un ejemplo del que no estoy seguro: si tiene varias versiones de contenido, todo en un URI (como una versión móvil o Internet Explorer), los ETags se pueden usar para buscar en CADA versión una coincidencia (por lo tanto, se llama if- ninguna coincidencia, si no coincide): dependiendo de a quién le pregunte, hay diferentes respuestas (como no tener un URI permanente para varias representaciones, etc.).
Metalshark
7

Parafraseando la excelente evaluación de Coding Horror del complemento YSlow Firebug (que parece que WebPageTest.org está utilizando como base para su evaluación):

"Yahoo es uno de los sitios web más activos del mundo, sus problemas probablemente no sean los tuyos".

Si no está tratando con millones de elementos únicos en su red con equilibrio de carga todos los días, existe una buena posibilidad de que las sugerencias proporcionadas no sean todas las opciones correctas al optimizar su sitio.

danlefree
fuente
Agradezco el comentario, pero te equivocas. Steve Sounders explica aquí: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (Él es un gran defensor de las mejoras útiles , es decir, no solo las mejoras que funcionarán para Google). Nuestro sitio es definitivamente lo suficientemente grande como para sentir un aumento de velocidad de tales mejoras (y ya lo ha hecho).
Django Reinhardt
2
La extensión yslow firebug ahora incluye una prueba para sitios más pequeños que es mucho más realista para la mayoría de los sitios.
John Conde
1
@Django Reinhardt - Reescribí mi respuesta, es cierto que muchas de las sugerencias son válidas para cualquier sitio, pero ETags en particular es discutible porque, en el caso de Y!, La característica entra en conflicto con el equilibrio de carga
danlefree
El enlace que proporcionó tenía un enlace a la descripción de ETags de Yahoo ( developer.yahoo.com/performance/rules.html#etags ) que responde muy bien a mis preguntas. (Sí, probablemente sería mejor para nosotros no servir ETags). Gracias.
Django Reinhardt
1
@Django: si tiene varios servidores, las ETag pueden ser un problema. Sin embargo, siempre que el mismo archivo siempre devuelva el mismo ETag, entonces está perfectamente bien. Ver también: webmasters.stackexchange.com/questions/1459/…
DisgruntledGoat