Pregunta

¿Cuál es un buen método para generar etag mediante programación para páginas web? ¿Se recomienda esta práctica? Algunos sitios recomiendan desactivar etags, otros recomiendan producirlos manualmente y otros recomiendan dejar la configuración predeterminada activa. ¿Cuál es la mejor manera aquí?

¿Fue útil?

Solución

Los ETags ayudan cuando utilizas algún tipo de mecanismo de almacenamiento en caché frente a tu generador de sitios web. Los navegadores mismos no los usan, escuchan " (if) modificado desde " o " edad " estructuras de encabezado, afaik.

De todos modos, debido a su naturaleza simple, no es un problema proporcionar un encabezado http con un ETag. Escuché que muchos servidores web simplemente toman la ubicación del archivo y la marca de tiempo del archivo y hacen un hash md5 sobre estos datos.

Nosotros, como ejemplo, construimos un etag simple pero efectivo con nuestro software. Cada " unidad de contenido " (es decir, html, jpegs, gifs ...) en nuestro software tiene un id único y un número de versión (es decir, un jpeg tiene el id " 17 " y la versión " 2 " ;, esto significa que se cambió una vez). Así que el ETag simplemente es la cadena " id-version " ;, aquí: " 17-2 " ;. Con el siguiente cambio sería " 17-3 " para que el operador reconozca el cambio, cargue la nueva parte de contenido (una vez) por completo y la almacene en su propio caché.

Pero es probable que también puedas usar la URL y una marca de tiempo (es decir, la marca de tiempo del archivo).

Otros consejos

Recomiendo generar un hash del contenido, por ejemplo, md5 ($ content) .
Además, para evitar la colisión de hash, es posible que desee agregar, por ejemplo, el ID del elemento de contenido (si es apropiado).

Bueno, los ETags tienen sentido cuando dependes mucho del almacenamiento en caché. Son un gran indicador del estado de un recurso (por ejemplo, una URL).

Por ejemplo, supongamos que utiliza una solicitud ajax para obtener los últimos comentarios de un usuario y desea saber si hay nuevos comentarios. Cambiar la alerta ETag a alerta de su aplicación de nuevo contenido es una forma menos costosa de verificar eso.

Porque si el ETag es el mismo, puedes mantener tu caché, pero de otra manera reconstruirlo.

Los ETags también tienen mucho sentido con las API de REST.

En cuanto a su generación, consulte spec , creo que puedes hacer casi cualquier cosa que quieras. Una marca de tiempo, un hash, lo que tenga sentido para usted / su aplicación.

Acabo de encender YSlow y se quejó de Etags, así que hice una pequeña investigación. El problema, según el blog de Yahoo (vea los comentarios también) es que las implementaciones de ETags predeterminadas utilizan el número de inodo del archivo o el número de revisión de ntfs o cualquier otra cosa igualmente específica del servidor como parte del hash. Esto, si bien es rápido, básicamente evita que el mismo archivo que se sirve en 2 servidores diferentes tenga la misma etiqueta y complica los navegadores y los cachés posteriores o los saldos de carga.

La sugerencia anterior de usar un hash MD5 es buena, aunque debes evitar que se convierta en un problema de rendimiento en sí mismo. La implementación de esas sugerencias depende del lector, aunque me parece que este es el tipo de cosas que su marco podría ser capaz de manejar por usted.

Para mí, ya que estoy en un entorno simple donde la marca de tiempo del archivo será más que adecuada, simplemente los desactivé en Apache usando FileETag none en mi archivo .htaccess. Esto cierra YSlow y debería hacer que las cosas vuelvan a la última fecha de modificación en el archivo.

En general, los " sitios " que desalientan su uso es Yahoo, y eso se debe a que algunos servidores web predeterminados no crean automáticamente ETAG que funcionen en granjas de servidores. (Lo que es correcto y preciso de Yahoo para reclamar).

Pero, si tiene un solo servidor web, está bien. Si no, querrá comprobar cómo maneja esto su servidor web y actuar de manera adecuada.

Mufasa,

Yahoo (y YSlow) realmente fomentan su uso, pero con la advertencia de que los ETags generados automáticamente difieren de un servidor a otro.

Todavía no puedo votar, así que solo diré que estoy de acuerdo con la sugerencia de un hash de la ruta del archivo y la marca de tiempo (o el nombre de la tabla + el valor del campo primario + la marca de tiempo si se representa por contenido de db).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top