Serveur Apache HTTP Version 2.4

Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

# Module Apache mod_expires

Description: | Génération des en-têtes HTTP `Expires` et `Cache-Control` en fonction de critères spécifiés par l'utilisateur
Statut: | Extension
Identificateur de Module: | expires_module
Fichier Source: | mod_expires.c

### Sommaire

Ce module permet de contrôler la définition de l'en-tête HTTP `Expires` et la directive `max-age` de l'en-tête HTTP `Cache-Control` dans les réponses du serveur. La date d'expiration peut être définie soit par rapport à la date de dernière modification du fichier source, soit par rapport à l'heure d'accès du client.

Ces en-têtes HTTP permettent d'informer le client quant à la validité et à la persistence du document. S'il est présent dans le cache, et tant qu'il n'est pas arrivé à expiration, le document sera servi à partir de ce dernier, plutôt qu'à partir du document source. Après expiration, la copie du document dans le cache sera considérée comme "expirée" et donc invalide, et une nouvelle copie devra être obtenue à partir du document source.

Pour modifier les directives de contrôle du cache autres que `max-age` (voir la RFC 2616 section 14.9), vous pouvez utiliser la directive `Header`.

Lorsque l'en-tête `Expires` est déjà présent dans la réponse générée par le serveur, par exemple s'il a été créé par un script CGI ou un serveur original via un serveur mandataire, ce module n'ajoute aucun en-tête `Expires` ou `Cache-Control`.

### Sujets

- Autre syntaxe de définition de l'intervalle

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

## Autre syntaxe de définition de l'intervalle

Pour une syntaxe plus lisible, on peut aussi utiliser les directives `ExpiresDefault` et `ExpiresByType` comme suit :

    ExpiresDefault "base  [plus num type] [num type] ..."
    ExpiresByType type/encoding "base  [plus num type] [num type] ..."

où base peut être :

- `access`
- `now` (équivalent à '`access`')
- `modification`

Le mot-clé `plus` est optionnel. num doit correspondre à une valeur entière [compatible avec `atoi()`], et type peut être choisi parmi :

- `years`
- `months`
- `weeks`
- `days`
- `hours`
- `minutes`
- `seconds`

Par exemple, pour faire expirer par défaut les documents 1 mois après leur accès, on peut utiliser une des directives suivantes :

    ExpiresDefault "access plus 1 month"
    ExpiresDefault "access plus 4 weeks"
    ExpiresDefault "access plus 30 days"

La date d'expiration peut être définie plus précisément en ajoutant plusieurs clauses 'num type' :

    ExpiresByType text/html "access plus 1 month 15 days 2 hours"
    ExpiresByType image/gif "modification plus 5 hours 3 minutes"

Notez que si vous utilisez une configuration basée sur la date de modification, l'en-tête Expires ne sera pas ajouté à un contenu qui ne provient pas directement d'un fichier sur disque ; et ceci tout simplement parce que ce type de contenu ne possède pas de date de modification.

## Directive ExpiresActive

Description: | Active la génération d'en-têtes `Expires`
Syntaxe: | `ExpiresActive On|Off`
Défaut: | `ExpiresActive Off`
Contexte: | configuration du serveur, serveur virtuel, répertoire, .htaccess
AllowOverride: | Indexes
Statut: | Extension
Module: | mod_expires

Cette directive permet d'activer ou de désactiver la génération des en-têtes `Expires` et `Cache-Control` pour les documents concernés ; en d'autres termes, si cette directive se trouve dans un fichier `.htaccess`, par exemple, elle ne s'applique qu'aux documents générés à partir du répertoire considéré. Si elle est définie à `Off`, les en-têtes ne seront générés pour aucun document du domaine considéré (sauf surcharge de la configuration à un niveau inférieur, comme un fichier `.htaccess` qui l'emporterait sur le fichier de configuration du serveur). Si elle est définie à `On`, les en-têtes seront ajoutés aux documents servis en fonction des critères définis par les directives `ExpiresByType` et `ExpiresDefault` (voir plus loin).

Notez que cette directive ne permet pas de garantir qu'un en-tête `Expires` ou `Cache-Control` sera généré. Si les critères ne sont pas respectés, aucun en-tête ne sera généré, et la directive produira le même effet que si elle n'avait pas été définie.

## Directive ExpiresByType

Description: | Définition de la valeur de l'en-tête `Expires` en fonction du type MIME
Syntaxe: | `ExpiresByType type MIME <code>secondes`
Contexte: | configuration du serveur, serveur virtuel, répertoire, .htaccess
AllowOverride: | Indexes
Statut: | Extension
Module: | mod_expires

Cette directive permet de définir la valeur de l'en-tête `Expires` et de la directive `max-age` de l'en-tête `Cache-Control` générés pour les documents du type MIME spécifié (par exemple, `text/html`). Le second argument définit le nombre de secondes qui seront ajoutées à un temps de base pour calculer la date d'expiration. `Cache-Control: max-age` se calcule en soustrayant la date de la requête de la date d'expiration et s'exprime en secondes.

Le champ `<code>` permet de spécifier quel temps doit être utilisé comme temps de base; `M` signifie que c'est la date de dernière modification du fichier qui doit être utilisée comme temps de base, alors que `A` signifie que c'est le moment où le client a accédé au document qui doit être utilisé comme temps de base.

La différence d'effet est subtile. Si on utilise `M`, toutes les copies existantes du document dans tous les caches expireront au même moment, ce qui peut convenir par exemple pour une notice hebdomadaire qui correspond toujours à la même URL. Si on utilise `A`, la date d'expiration sera différente pour chaque client, ce qui peut convenir pour des fichiers d'images qui ne changent pas très souvent, et en particulier pour un ensemble de documents en relation qui se réfèrent tous aux mêmes images (ces images sont alors accédées de manière répétitive dans un intervalle de temps assez court).

### Exemple :

    # active la génération des en-têtes Expires
    ExpiresActive On
    # les images GIF expirent au bout d'un mois dans le cache du
    # client
    ExpiresByType image/gif A2592000
    # les documents HTML restent valables une semaine après leur date
    # de dernière modification
    ExpiresByType text/html M604800

Notez que cette directive ne produit d'effet que si `ExpiresActive On` a été spécifié. Elle l'emporte, mais seulement pour le type MIME spécifié, sur toute date d'expiration définie par la directive `ExpiresDefault`.

Vous pouvez aussi définir le mode de calcul de la date d'expiration en utilisant une syntaxe alternative, comme décrit plus haut dans ce document.

## Directive ExpiresDefault

Description: | Mode de calcul par défaut de la date d'expiration
Syntaxe: | `ExpiresDefault <code>secondes`
Contexte: | configuration du serveur, serveur virtuel, répertoire, .htaccess
AllowOverride: | Indexes
Statut: | Extension
Module: | mod_expires

Cette directive permet de définir le mode de calcul par défaut de la date d'expiration pour tous les documents du domaine considéré. Elle peut être annulée pour certains types de documents par la directive `ExpiresByType`. Voir la description de cette dernière directive pour plus de détails à propos de la syntaxe de l'argument, ainsi que la description de la syntaxe alternative.