AEM : l’ordre incohérent des paramètres de requête affecte ETag et la mise en cache

Cet article décrit comment l’ordre non déterministe des paramètres de requête dans les URL d’image générées par l’API de diffusion de ressources ou le composant d’image principal peut entraîner des ETags instables et une mise en cache inefficace dans Adobe Experience Manager. Il fournit des étapes pour résoudre le problème.

Description description

Environnement

Adobe Experience Manager as a Cloud Service (toutes versions)

Problème/Symptômes

  • Une invalidation du cache de page d’HTML et des valeurs ETag incohérentes sont observées au niveau de la diffusion.
  • Certaines requêtes If-None-Match renvoient des 200 OK au lieu de 304 Not Modified, ce qui entraîne des téléchargements inutiles et réduit l’efficacité du cache.
  • Les URL d’image générées par l’API de diffusion de ressources ou le composant d’image principal incluent les paramètres de requête, tels que width, quality et preferwebp, dans un ordre non déterministe. Cela entraîne la modification du corps de réponse HTML littéral entre les requêtes, même lorsque le contenu est fonctionnellement identique.

Exemples d’ordre des paramètres incohérent :

  • /adobe/dynamicmedia/deliver/path/to/image?width=1600&quality=85&preferwebp=true
  • /adobe/dynamicmedia/deliver/path/to/image?quality=85&preferwebp=true&width=1600

Cause

Les collections non ordonnées, telles que HashMap, HashSet ou Collectors.toMap(), utilisées pour créer des paramètres de requête entraînent un ordre non déterministe. Cela entraîne la variation de la sortie HTML entre les requêtes et rompt la mise en cache basée sur ETag.

Résolution resolution

Pour résoudre ce problème, procédez comme suit :

  1. Identifiez le modèle Sling ou le code HTL responsable de la génération des URL d’image dans le composant affecté, par exemple, le héros de la page d’accueil ou le carrousel.

  2. Vérifiez si les paramètres de requête sont assemblés à l’aide de collections non triées telles que HashMap, HashSet ou Collectors.toMap().

  3. Refactorisez le code pour garantir un ordre déterministe des paramètres :

    • Utilisez un TreeMap pour trier les paramètres par clé, en veillant à la cohérence de l’ordre.
    • Si l’ordre d’insertion doit être préservé, utilisez un LinkedHashMap et assurez-vous que l’ordre d’insertion est cohérent entre les requêtes.
  4. Déployez le composant mis à jour.

  5. Vérifiez que l’ordre des paramètres de requête des URL d’image générées est cohérent sur toutes les instances et requêtes de publication.

  6. Vérifiez que les ETags pour la même page sont identiques sur les instances de publication et que la mise en cache CDN/navigateur fonctionne comme prévu, c’est-à-dire 304 Not Modified les réponses sont renvoyées lorsqu’elles sont appropriées.

Lecture connexe

recommendation-more-help
experience-cloud-kcs-help-kbarticles