Una directiva Expires*
con "modificación" como base hace referencia al tiempo de modificación del archivo en el servidor. Por lo tanto, si establece, por ejemplo, "modificación más 2 horas", cualquier navegador que solicite contenido dentro de las 2 horas posteriores a la modificación del archivo (en el servidor) almacenará dicho contenido en caché hasta 2 horas después de la hora de modificación del archivo. Y el navegador sabe cuándo se debe a que el servidor envía un encabezado Expires
con el tiempo de caducidad adecuado.
Me explico con un ejemplo: dicen que la configuración de Apache incluye la línea
ExpiresDefault modification plus 2 hours
y usted tiene un archivo index.html
, que la Directiva se aplica a ExpiresDefault
, en el servidor. Supongamos que carga una versión de index.html
a las 9:53 GMT, sobrescribiendo la anterior existente index.html
(si había una). Entonces ahora el tiempo de modificación de index.html
es 9:53 GMT. Si se ejecuta ls -l
en el servidor (o dir
en Windows), que se vería en la lista:
-rw-r--r-- 1 apache apache 4096 Feb 18 09:53 index.html
Ahora, con cada petición, Apache envía la cabecera Last-Modified
con la última fecha de modificación del archivo. Como tiene esa directiva ExpiresDefault
, también enviará el encabezado Expires
con un tiempo igual al tiempo de modificación del archivo (9:53) más dos horas. Así que aquí es parte de lo que ve el navegador:
Last-Modified: Wed, 18 Feb 2009 09:53:00 GMT
Expires: Wed, 18 Feb 2009 11:53:00 GMT
Si el tiempo en el que el navegador hace que esta solicitud es antes de 11:53 GMT, el navegador va a almacenar en caché la página, ya que aún no ha expirado.Entonces, si el usuario visita por primera vez la página a las 11:00 GMT y luego vuelve a la misma página a las 11:30 GMT, el navegador verá que su versión almacenada en caché sigue siendo válida y no (o, mejor dicho, está permitida).) hacer una nueva solicitud HTTP.
Si el usuario va a la página una tercera vez a las 12:00 GMT, el navegador ve que su versión almacenada en caché ha expirado (es después de 11:53) por lo que intenta validar la página, enviando una solicitud al servidor con un encabezado If-Modified-Since. Se devolverá una respuesta 304 (no modificada) sin cuerpo ya que la fecha de la página no se ha modificado desde la primera vez que se atendió. Dado que la fecha de caducidad ha pasado, la página está "obsoleta", se realizará una solicitud de validación cada vez que se visite la página hasta que falle la validación.
Ahora, imaginemos que ha cargado una nueva versión de la página a las 11:57. En este caso, el intento del navegador para validar la versión antigua de la página a las 12:00 falla y lo que recibe en la respuesta, junto con la nueva página, estas dos nuevas cabeceras:
Last-Modified: Wed, 18 Feb 2009 11:57:00 GMT
Expires: Wed, 18 Feb 2009 13:57:00 GMT
(La última fecha de modificación del archivo se convierte en 11:57 al cargar la nueva versión, y Apache calcula el tiempo de caducidad como 11:57 + 2:00 = 13:57 GMT).
La validación (utilizando la fecha más reciente) no será requerido ahora hasta las 13:57.
(Nota por supuesto que muchas otras cosas se envían junto con las dos cabeceras que se enumeran más arriba, sólo recorta lado todo lo demás para simplificar)
Hola David, esto tiene sentido, aunque todavía no estoy seguro, por qué y cómo sabe el servidor enviar el navegador. Entonces, si entiendo correcto, la próxima vez que el navegador solicite el recurso, el servidor de alguna manera envía información al navegador sobre el estado de modificación de los archivos, pero ¿no es esto un get –
? Pensé que esto sería más fácil de explicar con un ejemplo, entonces Edité uno en ... –
gracias increíble por su tiempo –