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 geben 200 OK anstelle von 304 Not Modified zurü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, quality und preferwebp in 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:

  1. 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.

  2. Überprüfen Sie, ob Abfrageparameter mit ungeordneten Sammlungen wie HashMap, HashSet oder Collectors.toMap() zusammengestellt werden.

  3. 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 LinkedHashMap und stellen Sie sicher, dass die Einfügereihenfolge in allen Anfragen konsistent ist.
  4. Stellen Sie die aktualisierte Komponente bereit.

  5. Stellen Sie sicher, dass die generierten Bild-URLs über alle Veröffentlichungsinstanzen und -anfragen hinweg über eine konsistente Abfrageparameterreihenfolge verfügen.

  6. 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 Modified Antworten bei Bedarf zurückgegeben werden.

Verwandtes Lesen

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