Cómo configurar la caducidad de la cache con Apache

Los navegadores, para reducir la cantidad de datos que descargan tienen un almacén que llamamos cache donde guardan estos datos. El propósito de guardarlos por el navegador es poder usarlos próximamente. Los datos en cache son típicamente ficheros de imagen aunque pueden ser otros tipos de ficheros, como los mismos html. Los elementos en la cache tiene un tiempo de caducidad que el propio navegador asigna a su consideración.

Así el navegador cuando interpreta una página web y necesita descargar una imagen primero consulta si dispone de ella en la cache. Si esta en la cache y no ha caducado todavía la toma de ahí en vez de descargarla.

Por el lado del servidor también es importante, ya que de este modo el servidor enviará menos datos reduciendo el ancho de banda empleado. Así el servidor Apache tiene un mecanismo para forzar a que los elementos que envía se guarden en la cache del navegador por un tiempo determinado.

Apache dispone de un modulo llamado expires que se encarga de poner fecha de caducidad a los elementos que el navegador pondrá en cache. Expires se configura mediante el archivos .htaccess y afecta a los archivos del directorio donde se elija y sus subdirectorios.

Para configurar expires debemos añadir al .htaccess una nueva sección para su configuración. Si no existiera .htaccess lo creamos nuevo.

También se puede crear un fichero llamado expires.conf en directorio de configuración de apache:

/etc/httpd/conf.d/expires.conf
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 6 months"
ExpiresByType text/css "access plus 2 weeks"
ExpiresByType text/javascript "access plus 4 weeks"
</IfModule>

La clave ExpiresActive hace efectiva la configuración del modulo expires. ExpiresDefault configura por defecto todos los tipos de archivo. En el ejemplo vemos que la caducidad es de más de 6 meses. Otra clave que puede usarse ExpiresByType text/css permite configurar para un tipo de archivo especifico(en este caso los css).

Otra forma de especificar el tiempo es indicándolo en segundos ExpiresDefault A86400, donde la A indica Acceso y el número posterior el tiempo, en este caso un día.