AEM: Inkonsistente Abfrageparameter-Reihenfolge wirkt sich auf E-Tag und Caching aus
In diesem Artikel wird beschrieben, wie eine nicht-deterministische Reihenfolge von Abfrageparametern in Bild-URLs, die von der Asset-Bereitstellungs-API oder der Kernbildkomponente generiert werden, zu instabilen E-Tags und ineffizientem Caching in Adobe Experience Manager führen kann. Es enthält Schritte zur Behebung des Problems.
Beschreibung description
Umgebung
Adobe Experience Manager as a Cloud Service (alle Versionen)
Problem/Symptome
- Auf der Bereitstellungsebene treten eine HTML-Seiten-Cache-Invalidierung und inkonsistente E-Tag-Werte auf.
- Einige
If-None-Match-Anfragen geben200 OKanstelle von304 Not Modifiedzurück, was zu unnötigen Downloads und geringerer Cache-Effizienz führt. - Bild-URLs, die von der Asset-Bereitstellungs-API oder der Kernbildkomponente generiert werden, enthalten Abfrageparameter wie
width,qualityundpreferwebpin einer nicht deterministischen Reihenfolge. Dies führt dazu, dass sich der literale HTML-Antworttext zwischen Anfragen ändert, auch wenn der Inhalt funktionell identisch ist.
Beispiele für inkonsistente Parameterreihenfolge:
/adobe/dynamicmedia/deliver/path/to/image?width=1600&quality=85&preferwebp=true/adobe/dynamicmedia/deliver/path/to/image?quality=85&preferwebp=true&width=1600
Ursache
Ungeordnete Sammlungen wie HashMap, HashSet oder Collectors.toMap(), die zum Erstellen von Abfrageparametern verwendet werden, führen zu einer nicht deterministischen Reihenfolge. Dies führt dazu, dass die HTML-Ausgabe zwischen -Anfragen variiert und das ETag-basierte Caching unterbrochen wird.
Lösung resolution
Führen Sie zur Behebung des Problems folgende Schritte aus:
-
Identifizieren Sie das Sling-Modell oder den HTL-Code, die bzw. der für die Generierung von Bild-URLs in der betroffenen Komponente verantwortlich ist, z. B. den Homepage-Helden oder das Karussell.
-
Überprüfen Sie, ob Abfrageparameter mit ungeordneten Sammlungen wie
HashMap,HashSetoderCollectors.toMap()zusammengestellt werden. -
Den Code umgestalten, um eine deterministische Parameterreihenfolge sicherzustellen:
- Verwenden Sie eine
TreeMap, um Parameter nach Schlüssel zu sortieren und so eine konsistente Reihenfolge zu gewährleisten. - Wenn die Einfügereihenfolge beibehalten werden muss, verwenden Sie eine
LinkedHashMapund stellen Sie sicher, dass die Einfügereihenfolge in allen Anfragen konsistent ist.
- Verwenden Sie eine
-
Stellen Sie die aktualisierte Komponente bereit.
-
Stellen Sie sicher, dass die generierten Bild-URLs über alle Veröffentlichungsinstanzen und -anfragen hinweg über eine konsistente Abfrageparameterreihenfolge verfügen.
-
Vergewissern Sie sich, dass eTags für dieselbe Seite in allen Veröffentlichungsinstanzen identisch sind und dass das CDN-/Browser-Caching erwartungsgemäß funktioniert, d. h. dass
304 Not ModifiedAntworten bei Bedarf zurückgegeben werden.