Pregunta

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

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

No quiero hacer nada especial como la de 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 PHP para apoyar esto o es todo de Apache?

¿Fue útil?

Solución

Son ligeramente diferentes: el ETag no tiene ninguna información que el cliente pueda usar para determinar si volverá a hacer una solicitud para ese archivo en el futuro. Si ETag es todo lo que tiene, siempre tendrá que hacer una solicitud. Sin embargo, cuando el servidor lee el ETag de la solicitud del cliente, el servidor puede determinar si debe enviar el archivo (HTTP 200) o decirle al cliente que solo use su copia local (HTTP 304). Una ETag es básicamente una suma de comprobación para un archivo que cambia semánticamente cuando cambia el contenido del archivo.

El encabezado Expires es utilizado por el cliente (y servidores proxy / cachés) para determinar si incluso necesita realizar una solicitud al servidor. Cuanto más cerca esté de la fecha de caducidad, es más probable que el cliente (o proxy) realice una solicitud HTTP para ese archivo desde el servidor.

Entonces, lo que realmente quiere hacer es usar AMBOS encabezados: configure el encabezado Expira en un valor razonable en función de la frecuencia con la que cambia el contenido. Luego configure ETags para que se envíen de modo que cuando los clientes envíen una solicitud al servidor, pueda determinar más fácilmente si se debe enviar o no el archivo.

Una última nota sobre ETag: si está utilizando una configuración de servidor con equilibrio de carga con varias máquinas que ejecutan Apache, probablemente desee desactivar la generación de ETag. Esto se debe a que los inodes se usan como parte del algoritmo hash ETag, que será diferente entre los servidores. Puede configurar Apache para que no use inodes como parte del cálculo, pero luego querrá asegurarse de que las marcas de tiempo en los archivos sean exactamente las mismas, para garantizar que se genere la misma ETag para todos los servidores.

Otros consejos

Los encabezados

Etag y Última modificación son validadores .

Ayudan al navegador y / o al caché (proxy inverso) a comprender si un archivo / página ha cambiado, incluso si conserva el mismo nombre.

Caduca y Control de caché proporcionan información de actualización .

Esto significa que informan, el navegador y los proxies intermedios inversos, hasta qué hora o durante cuánto tiempo, pueden mantener la página / archivo en su caché.

Entonces, la pregunta generalmente es cuál validador usar, etag o última modificación, y qué encabezado de información de actualización usar, caduca o control de caché.

Expires y Cache-Control son "fuertes almacenamiento en caché de los encabezados"

Last-Modified y ETag son "débiles almacenamiento en caché de los encabezados"

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

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

De manera predeterminada, Apache generará un Etag basado en el número de inodo del archivo, la fecha de la última modificación y el tamaño, que deberían estar perfectamente bien para hacer lo que quieras. Creo que también generará de forma predeterminada un encabezado de Última modificación basado en la última hora de modificación del archivo en el disco, que también está perfectamente bien para hacer lo que desee.

Probablemente también debería hacer que Apache envíe un encabezado de Caduca 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 sepan que el contenido se puede almacenar en caché. Eche un vistazo a mod_expires para configurar eso.

Otro resumen:

Necesitas usar ambos. ETags son & "; Lado del servidor &"; información. Los vencimientos son un & Quot; Lado del cliente & Quot; almacenamiento en caché.

  • Utilice ETags excepto si tiene un servidor con equilibrio de carga. Son seguros y permitirán que los clientes sepan que deben obtener nuevas versiones de los archivos de su servidor cada vez que cambie algo de su lado.

  • Caduca debe usarse con precaución, como si estableciera una fecha de vencimiento en el futuro pero desea cambiar uno de los archivos inmediatamente (un archivo JS por ejemplo), algunos usuarios ¡Es posible que no obtenga la versión modificada hasta mucho tiempo!

Una cosa adicional que me gustaría mencionar que algunas de las respuestas pueden haberse perdido es la desventaja de tener tanto ETags como Expires/Cache-control en sus encabezados.

Dependiendo de sus necesidades, puede agregar bytes adicionales en sus encabezados, lo que puede aumentar los paquetes, lo que significa más sobrecarga de TCP. Nuevamente, debería ver si la sobrecarga de tener ambas cosas en sus encabezados es necesaria o si solo agregará un peso extra en sus solicitudes, lo que reduce el rendimiento.

Puede leer más al respecto en esta excelente publicación de blog de Kyle Simpson: http://calendar.perfplanet.com/2010/bloated-request-response-headers/

En mi opinión, con el encabezado de caducidad, el servidor puede decirle al cliente cuándo mis datos estarían obsoletos, mientras que con Etag, el servidor verificaría el valor de etag para el cliente 'cada solicitud.

ETag se usa para determinar si un recurso debe usar la copia uno. y vence el encabezado como Cache-Control le dice al cliente que antes de las décadas de caché, el cliente debería buscar el recurso local.

En los sitios modernos, a menudo se ofrece un archivo llamado hash, como app.98a3cf23.js, por lo que es una buena práctica usar el encabezado Expires. Además de esto, también reduce el costo de la red.

Espero que ayude;)

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