Activation de la mise en cache du réseau CDN

Découvrez comment activer la mise en cache des réponses HTTP dans le réseau CDN d’AEM as a Cloud Service. La mise en cache des réponses est contrôlée par par les en-têtes de cache de réponse HTTP Cache-Control, Surrogate-Control ou Expires.

Ces en-têtes de cache sont généralement définis dans les configurations vhost du Dispatcher d’AEM à l’aide de mod_headers, mais peuvent également être définis dans du code Java™ personnalisé s’exécutant dans l’instance de publication AEM directement.

Comportement de mise en cache par défaut

Lorsque des configurations personnalisées NE sont PAS présentes, les valeurs par défaut sont utilisées. Dans la copie d’écran suivante, vous pouvez voir le comportement de mise en cache par défaut pour les instances de publication et de création AEM lors du déploiement d’un projet AEM mynewsite basé sur l’archétype de projet AEM.

Comportement de mise en cache par défaut

Pour plus d’informations, consultez Instance de publication AEM – Durée de vie du cache par défaut et Instance de création AEM – Durée de vie du cache par défaut.

En résumé, AEM as a Cloud Service met en cache la plupart des types de contenu (HTML, JSON, JS, CSS et Assets) dans l’instance de publication AEM et quelques types de contenu (JS, CSS) dans l’instance de création AEM.

Activer la mise en cache

Pour modifier le comportement de mise en cache par défaut, vous pouvez mettre à jour les en-têtes de cache de deux façons.

  1. Configuration vhost de Dispatcher : disponible uniquement pour l’instance de publication AEM.
  2. Code Java™ personnalisé : disponible pour les instances de publication et de création AEM.

Examinons chacune de ces options.

Configuration vhost du Dispatcher

Cette option est l’approche recommandée pour activer la mise en cache, mais elle n’est disponible que pour l’instance de publication AEM. Pour mettre à jour les en-têtes de cache, utilisez le module mod_headers et la directive <LocationMatch> dans le fichier vhost du serveur Apache HTTP. La syntaxe générale se présente comme suit :

<LocationMatch "$URL$ || $URL_REGEX$">
    # Removes the response header of this name, if it exists. If there are multiple headers of the same name, all will be removed.
    Header unset Cache-Control
    Header unset Surrogate-Control
    Header unset Expires

    # Instructs the web browser and CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
    Header set Cache-Control "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX"

    # Instructs the CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
    Header set Surrogate-Control "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX"

    # Instructs the web browser and CDN to cache the response until the specified date and time.
    Header set Expires "Sun, 31 Dec 2023 23:59:59 GMT"
</LocationMatch>

Le tableau suivant résume l’objectif de chaque en-tête et des attributs applicables pour l’en-tête.

Navigateur web
Réseau de diffusion de contenu (CDN)
Description
Cache-Control
Cet en-tête contrôle la durée de vie du navigateur web et du cache du réseau CDN.
Surrogate-Control
Cet en-tête contrôle la durée de vie du cache du réseau CDN.
Expiration
Cet en-tête contrôle la durée de vie du navigateur web et du cache du réseau CDN.
  • max-age  : cet attribut contrôle la « durée de vie » (TTL, Time to live) du contenu de la réponse en secondes.
  • stale-while-revalidate  : cet attribut contrôle le traitement de l’état obsolète du contenu de la réponse sur la couche de réseau CDN lorsque la requête reçue se trouve dans la période spécifiée en secondes. L’état obsolète est la période qui suit l’expiration du TTL et avant que la réponse ne soit revalidée.
  • stale-if-error  : cet attribut contrôle le traitement d’état obsolète du contenu de la réponse sur la couche de réseau CDN lorsque le serveur d’origine n’est pas disponible et que la requête reçue est comprise dans la période spécifiée en secondes.

Pour plus d’informations, consultez les détails de l’obsolescence et de la revalidation.

Exemple

Pour augmenter la durée de vie du navigateur web et du cache du réseau CDN du type de contenu HTML à 10 minutes sans traitement d’état obsolète, procédez comme suit :

  1. Dans votre projet AEM, recherchez le fichier vhost souhaité à partir du répertoire dispatcher/src/conf.d/available_vhosts.

  2. Mettez à jour le fichier vhost (par exemple, wknd.vhost) comme suit :

    code language-none
    <LocationMatch "^/content/.*\.(html)$">
        # Removes the response header if present
        Header unset Cache-Control
    
        # Instructs the web browser and CDN to cache the response for max-age value (600) seconds.
        Header set Cache-Control "max-age=600"
    </LocationMatch>
    

    Les fichiers vhost dans le répertoire dispatcher/src/conf.d/enabled_vhosts sont des liens symboliques vers des fichiers dans le répertoire dispatcher/src/conf.d/available_vhosts, veillez donc à créer des liens symboliques s’ils ne sont pas présents.

  3. Déployez les modifications vhost dans l’environnement AEM as a Cloud Service souhaité à l’aide de Cloud Manager – Pipeline de configuration de niveau web ou des commandes du RDE.

Cependant, pour avoir des valeurs différentes pour la durée de vie du navigateur web et du cache du réseau CDN, vous pouvez utiliser l’en-tête Surrogate-Control dans l’exemple ci-dessus. De même, pour que le cache arrive à expiration à une date et une heure spécifiques, vous pouvez utiliser l’en-tête Expires. En outre, à l’aide des attributs stale-while-revalidate et stale-if-error, vous pouvez contrôler le traitement de l’état obsolète du contenu de la réponse. Le projet AEM WKND comporte une configuration du cache du réseau CDN de traitement de l’état obsolète de référence.

De même, vous pouvez mettre à jour les en-têtes de cache d’autres types de contenu (JSON, JS, CSS et Assets).

Code Java™ personnalisé

Cette option est disponible pour les instances de publication et de création AEM. Toutefois, il n’est pas recommandé d’activer la mise en cache dans l’instance de création AEM et de conserver le comportement de mise en cache par défaut.

Pour mettre à jour les en-têtes de cache, utilisez l’objet HttpServletResponse dans le code Java™ personnalisé (servlet Sling, filtre de servlet Sling). La syntaxe générale se présente comme suit :

// Instructs the web browser and CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
response.setHeader("Cache-Control", "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX");

// Instructs the CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
response.setHeader("Surrogate-Control", "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX");

// Instructs the web browser and CDN to cache the response until the specified date and time.
response.setHeader("Expires", "Sun, 31 Dec 2023 23:59:59 GMT");
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69