Apache: Configurar expires headers (cabeceras de caducidad)

¿Qué son?

Expires headers (cabeceras de caducidad) permiten definir durante cuando tiempo es válido un recurso, de tal forma que el navegador puede decidir entre solicitar de nuevo el recurso al servidor o recuperarlo desde su cache.

¿Cómo funciona?

El servidor, con cada petición, incluye la cabecera Expires indicando cuando caduca el recurso. Para ello es necesario configurar el servidor o virtualhost para que incluya la cabecera Expires junto con la fecha de caducidad. El periodo de vigencia para cada tipo de recurso lo debe definir el administrador del servidor, pero un punto de comienzo puede ser:

  • html, 0 segundos (no se cachea).
  • css, una semana.
  • javascript, una semana.
  • pdf, un mes.
  • imágenes, un mes.
  • audio, un mes.
  • video, un mes.

A continuación un ejemplo:

1
2
3
4
5
6
[agd@folio13 ~]$ curl -sI https://blog.guillen.io | egrep 'Date|Expires'
Date: Sun, 20 Sep 2016 18:54:21 GMT
Expires: Sun, 20 Sep 2016 18:54:21 GMT
[agd@folio13 ~]$ curl -sI https://blog.guillen.io/css/style.css | egrep 'Date|Expires'
Date: Sun, 20 Sep 2016 18:54:30 GMT
Expires: Sun, 27 Sep 2016 18:54:30 GMT

Más información: Apache Module mod_expires

Configurar Apache

Añadir el siguiente bloque en el archivo de configuración de apache o del virtualhost:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<IfModule mod_expires.c>
ExpiresActive on
# Your document html
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType application/pdf "access plus 1 month"
# Media: images, video, audio
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType audio/mp3 "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/avi "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# CSS and JavaScript
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
</IfModule>

Entradas de interés

Contenidos
  1. 1. ¿Qué son?
  2. 2. ¿Cómo funciona?
  3. 3. Configurar Apache