354 votos

ETag vs encabezado Expira

He mirado pero no he sido capaz de averiguar si debo usar tanto un ETag y un Caduca Encabezado o uno o el otro.

Lo que estoy tratando de hacer es asegurarme de que mis archivos flash (y otras imágenes y lo que no sólo se actualiza cuando hay un cambio en los archivos.

No quiero hacer nada especial, como por ejemplo cambiar el nombre de archivo o poner algún extraño caracteres en la final de la url para que no consigue en caché.

Además, ¿hay algo que deba hacer a través de programación en mi fin en mis scripts de PHP para apoyar a este o es todo de Apache?

671voto

Marc Novakowski Puntos 22611

Son un poco diferentes - el ETag no dispone de ninguna información que el cliente puede utilizar para determinar si debe o no hacer una solicitud para que el archivo de nuevo en el futuro. Si ETag es todo lo que tiene, siempre se tiene que hacer una solicitud. Sin embargo, cuando el servidor lee la ETag de la solicitud del cliente, entonces se puede determinar si se debe enviar el archivo (HTTP 200) o decirle que el cliente sólo tiene que utilizar su copia local (HTTP 304). Un ETag es básicamente una suma de comprobación de un archivo que semánticamente cambios cuando el contenido de los cambios de archivos.

La Caduca encabezado es utilizado por el cliente (y los servidores proxy/caché) para determinar si es o no se necesita para hacer una solicitud para el servidor de todos. Cuanto más cerca esté la fecha de vencimiento, lo más probable es que el cliente (o proxy) va a hacer una petición HTTP para ese archivo desde el servidor.

Así que realmente lo que quieres hacer es utilizar AMBAS cabeceras de conjunto de la Caduca encabezado a un valor razonable basado en la frecuencia de los cambios de contenido. A continuación, configure ETags para ser enviados, de manera que cuando el cliente envía una petición al servidor, se puede determinar con más facilidad si enviar o no el archivo de nuevo.

Una última nota acerca de ETag - si usted está usando un equilibrio de carga del servidor de configuración con múltiples máquinas ejecutando Apache probablemente querrá desactivar ETag generación. Esto es debido a que los inodes se utilizan como parte de la ETag algoritmo de hash que será diferente entre los servidores. Usted puede configurar Apache para no utilizar los inodos como parte del cálculo, pero, a continuación, usted querrá asegurarse de que las marcas de tiempo en los archivos son exactamente los mismos, para asegurar el mismo ETag se genera para todos los servidores.

107voto

john Puntos 444

Etag y de Última modificación encabezados de los validadores.

Ellos ayudan al navegador a entender si un archivo o página, ha cambiado, incluso si se conserva el mismo nombre.

Vence y Cache-control están dando la actualización de la información.

Esto significa que ellos informan, el navegador y el inverso entre servidores proxy, a qué hora, o por cuánto tiempo, pueden mantener la página/archivo en su caché.

Así que la pregunta general es que un validador para uso de etag o de última modificación, y actualización de información de encabezado para el uso, fecha de vencimiento o de control de caché.

29voto

hienbt88 Puntos 129

Expires y Cache-Control son "fuertes almacenamiento en caché de las cabeceras"

Last-Modified y ETag son "débiles almacenamiento en caché de las cabeceras"

Primero el navegador de verificación Expires/Cache-Control a determinar si o no para hacer una solicitud para el servidor

Si tiene que hacer una solicitud, se le enviará Last-Modified/ETag en la petición HTTP. Si el Etag valor del documento coincide con que, el servidor enviará un 304 código en lugar de 200, y no el contenido. El navegador se carga el contenido de su caché.

18voto

David Z Puntos 49476

Por defecto, Apache generará un Etag basado en el archivo número de inodo, última fecha de modificación y tamaño, que deben estar perfectamente bien para hacer lo que quieres. Creo que también va a generar por defecto el Último encabezado Modificado basado en la última fecha de modificación del archivo en el disco, que también está perfectamente bien para hacer lo que quieres.

Probablemente, usted debe también tener Apache enviar un Caduca encabezado con fecha de un año en el futuro (según http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21), para que los navegadores conocer el contenido es almacenable. Eche un vistazo a mod_expires para configurar eso.

13voto

Benjamin Piette Puntos 410

Otro resumen:

Usted necesidad de utilizar ambos. ETags son un "servidor" de la información. Expira son un "lado del Cliente" caché.

  • El uso de ETags excepto si tienes una servidores con equilibrio de carga. Que sean seguros y que sus clientes sepan que deben obtener las nuevas versiones de su servidor de archivos cada vez que cambia algo en tu lado.

  • Expira debe ser utilizado con precaución, como si se establece una fecha de caducidad lejana en el futuro, pero desea cambiar uno de los archivos inmediatamente (un archivo JS, por ejemplo), algunos usuarios no pueden obtener la versión modificada hasta mucho tiempo!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: