Cómo configurar Apache 2.2.3 para enviar "última modificación", etc.

9

y decirle al navegador que vuelva a cargar un objeto (y / o una página ... todo en el sitio) solo si se ha modificado desde la última visita ??? htaccess, httpd.conf ... ¿tiene una directiva adecuada para mi caso? Muchas gracias

smepie
fuente

Respuestas:

5

Tenga en cuenta que los Last-Modifiedencabezados son encabezados de caché débiles. La preferencia actual es usar Cache-Controlencabezados.

Google tiene un buen artículo sobre esto.

Optimizar el almacenamiento en caché

Caduca y Control de caché: max-age. Estos especifican la "duración de actualización" de un recurso, es decir, el período de tiempo durante el cual el navegador puede usar el recurso en caché sin verificar si hay una nueva versión disponible del servidor web. Son "encabezados de almacenamiento en caché fuertes" que se aplican incondicionalmente; es decir, una vez que se configuran y se descarga el recurso, el navegador no emitirá ninguna solicitud GET para el recurso hasta la fecha de caducidad o la edad máxima alcanzada.

Última modificación y ETag. Estos especifican algunas características sobre el recurso que el navegador comprueba para determinar si los archivos son los mismos. En el encabezado Última modificación, esta siempre es una fecha. En el encabezado ETag, este puede ser cualquier valor que identifique de forma exclusiva un recurso (las versiones de archivo o los hashes de contenido son típicos). Last-Modified es un encabezado de almacenamiento en caché "débil" en el sentido de que el navegador aplica una heurística para determinar si se obtiene o no el elemento del caché. (Las heurísticas son diferentes entre los diferentes navegadores). Sin embargo, estos encabezados permiten al navegador actualizar eficientemente sus recursos en caché mediante la emisión de solicitudes GET condicionales cuando el usuario vuelve a cargar la página explícitamente. Los GET condicionales no devuelven la respuesta completa a menos que el recurso haya cambiado en el servidor y, por lo tanto, tengan una latencia más baja que los GET completos.

Recomiendo usar uno Cache-Controlo más Expiresencabezados según sea necesario ya que son encabezados de caché fuertes. Algunos sistemas ignorarán las fechas de Última modificación.

Luego puede usar una herramienta como curlo http://redbot.org para verificar los encabezados.

jeffatrackaid
fuente
2
FWIW: "débil" es algo que Google inventó. Expireses un encabezado totalmente inapropiado para recursos que no caducan. Algunos recursos pueden modificarse, pero no en una fecha de vencimiento. El punto de Google es que Last-Modifiedrequiere un GET condicional, mientras que Expirespermite que el caché del navegador omita el GET por completo.
Dancrumb
1
El término débil es simplemente semántica. El punto es que el uso de Last-Modifiedencabezados en ausencia de otras instrucciones de almacenamiento en caché deja el período de caché hasta el cliente HTTP. Si un recurso no se ha modificado desde la Last-Modifiedfecha, el recurso debe considerarse nuevo. En contraste, cuando se usa un encabezado Expireso Cache-Controlel origen puede establecer un período de actualización explícito.
jeffatrackaid
1
"débil" v "fuerte" se define en tools.ietf.org/html/rfc7232#section-2.1 (Nota también para @Dancrumb)
John Bentley