Cache-Control VS Expires o cómo reducir tu factura en Amazon S3

Amazon Web Services

Cache-Control y Expires son dos valores “Metadata o Header” para nuestros navegadores orientados a “Cache” que básicamente sirven para aumentar la velocidad de nuestro sitio web, reducir la transferencia de datos y si eres usuario de Amazon S3 te ahorra tu factura mensual sustancialmente.

Como muchos sabréis uno de los requisitos para el posicionamiento es la velocidad de la pagina web. De ahí que yo personalmente uso Amazon S3 en casi todos mis proyectos “decentes” Este blog no, no hace falta que lo compruebes… Como se suele decir: “En casa de herrero cuchillos de palo”. El caso es que es bastante fácil de configurar y usar. Lo malo es que cuando la pagina web aumenta de visitas el numero de GET requests aumenta tu factura sustancialmente. ¿Qué es lo que podemos hacer?

Cada archivo en nuestro bucket puede tener metadatos propios. Entre ellos nos interesan concretamente “Cache-Control” y “Expires”. Dos valores que indican al navegador no descargar el archivo si esta guardado en el caché. Con lo cual nos ahorramos un request y en consiguiente unos cuantos eurillos a final de mes.

Lógicamente la velocidad de la web aumenta sustancialmente, de hecho es imprescindible el uso de herramientas de GtMetrix y Google Page Speed.

¿Cual usar el Cache-Control o Expires?

Pues yo personalmente hace un par de años usaba los dos. De hecho el Expires lo he usado mal hasta hace unos meses… Según he podido leer es mejor usar el Cache-Control, es un “header” mucho mas nuevo, mas fácil de utilizar y mantener a largo plazo. El Cache-Control admite un valor numérico en segundos. Yo suelo usar como todos el 2592000, es decir el valor para 30 días.

Expires admite un valor de fecha, es decir tienes que meter algo así “Sat, 27 Jun 2099 23:59:59 GMT”. Lo que significaría que hasta el año 2099 el archivo hay que guardarlo en el Caché. Lo que dice Google de este asunto es esto literalmente:

Nosotros preferimos Expires antes que Cache-Control: max-age porque su compatibilidad es mayor. No establezcas un máximo superior a un año, ya que infringiría las normas RFC.

Desde el punto de vista personal yo pienso usar el “Cache-Control” por su facilidad de uso y que todos los navegadores modernos lo soportan. Es muy importante que sepas si tienes puesto los dos, el Cache-Control o “max-age” tiene preferencia sobre el Expires. Si no te ha quedado claro, aquí hay un maravilloso articulo en el blog de Heroku.

¿Cómo establecer el Cache Control y no morir en el intento?

Puedes hacerlo uno por uno, si se trata de un logotipo, archivo CSS o algo “puntual” desde el S3 Management Console, cambiando los datos en la pestaña propiedades uno por uno. En el caso de una carpeta llena a rebosar te recomiendo que uses CloudBerry Explorer (Gratis) o BucketExplorer (69 $). Estos programas te pueden hacer el apaño, sobre todo para los que ya estén alojados dentro del “bucket”. En el caso de que subes archivos desde la aplicación web, debes preocuparte establecer los “Header” en el acto con el código fuente.