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-Matchrenvoient des200 OKau lieu de304 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,qualityetpreferwebp, 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 :
-
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.
-
Vérifiez si les paramètres de requête sont assemblés à l’aide de collections non triées telles que
HashMap,HashSetouCollectors.toMap(). -
Refactorisez le code pour garantir un ordre déterministe des paramètres :
- Utilisez un
TreeMappour 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
LinkedHashMapet assurez-vous que l’ordre d’insertion est cohérent entre les requêtes.
- Utilisez un
-
Déployez le composant mis à jour.
-
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.
-
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 Modifiedles réponses sont renvoyées lorsqu’elles sont appropriées.