Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/08/2011, 10:45
Avatar de Negora
Negora
 
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 21 años, 4 meses
Puntos: 5
Respuesta: Forzar al navegador a usar su caché interna.

Bueno, bueno... Tras una infernal tarde de pruebas y más pruebas (menudo dolor de cabeza :S ), creo que ya he dado con el quid de todo esto.

Parece ser que el hecho de que muchos de estos navegadores guarden contenido en la caché tiene muchísimo que ver con el origen de la llamada que solicita dicho contenido, distinguiendo esencialmente entre la barra de direcciones o bien un documento Web. En esencia, se comporta diferente si existe un "Referrer" o no. Y claro, yo estaba haciendo todas las pruebas directamente desde esa barra, lo que me estaba proporcionando unos resultados extraños.

Tan importante es esto, que incluso Firefox, que se comporta perfectamente con el valor "Cache-Control: max-age=86400" con llamadas desde la barra, no necesita siquiera de esta cabecera para usar la caché propia cuando el contenido viene llamado desde dentro de un documento Web. Por ejemplo, desde un enlace o un iframe.

Supongo que todo esto viene por el hecho de que un usuario, cuando escribe una URL en la barra de direcciones, espera que siempre, siempre, sea una versión "fresca". Pero claro, el hecho de que ciertas cabeceras en Firefox alteren ese comportamiento, me ha creado una confusión absoluta. Pero conste que, en ese sentido, me parece que es el navegador que hace lo más adecuado, junto con IE.

Así las cosas, parece que la estrategia a seguir es controlar las cabeceras "Last-Modified" y "ETag", ya que con éstas basta para que cualquiera de los navegadores haga uso de su caché interna si existe "Referrer". En mi caso, lo que hago es publicar ambas cabeceras y además controlar si el cliente envía las cabeceras "If-Last-Modified" para "Last-Modified" y "If-None-Match" para "ETag". De ese modo puedo devolver un código de estado 304 (no modificado) si corresponde, y acelerar un poco las cosas. Y digo un poco, porque en mi caso he comprobado que lo que más tiempo consume es la llamada al servidor, pues no transfiero muchos datos y además estos van comprimidos con GZIP.

La única duda que me queda es saber si las cabeceras "Expires" o "Cache-Control: max-age=86400" influyen sobre el período de tiempo durante el que el navegador hace uso de la copia en caché antes de volver a consultar al servidor (salvo que el usuario la vacíe o refresque la página, claro está). En Firefox parece que sí que lo hacen, pero creo que quizá sea mejor no interferir en eso y dejar que cada navegador se gestione sólo en ese sentido. Total, lo más importante es que el uso de la caché se haga como mínimo mientras dure la sesión del usuario.