AEM: l’ordinamento incoerente dei parametri di query influisce su ETag e sul caching
Questo articolo descrive come l’ordinamento non deterministico dei parametri di query negli URL delle immagini generati dall’API di consegna delle risorse o dal componente immagine di base possa causare un’instabilità dei tag ET e una memorizzazione nella cache inefficiente in Adobe Experience Manager. Fornisce i passaggi per risolvere il problema.
Descrizione description
Ambiente
Adobe Experience Manager as a Cloud Service (tutte le versioni)
Problema/Sintomi
- Sul livello di consegna si osservano l’invalidazione della cache delle pagine HTML e valori ETag incoerenti.
- Alcune richieste di
If-None-Matchrestituiscono200 OKinvece di304 Not Modified, con conseguente download non necessari e riduzione dell’efficienza della cache. - Gli URL di immagini generati dall’API di distribuzione delle risorse o dal componente immagine di base includono parametri di query, come
width,qualityepreferwebp, in ordine non deterministico. Questo causa la modifica del corpo della risposta letterale di HTML tra le richieste, anche quando il contenuto è funzionalmente identico.
Esempi di ordinamento incoerente dei parametri:
/adobe/dynamicmedia/deliver/path/to/image?width=1600&quality=85&preferwebp=true/adobe/dynamicmedia/deliver/path/to/image?quality=85&preferwebp=true&width=1600
Causa
Le raccolte non ordinate, ad esempio HashMap, HashSet o Collectors.toMap(), utilizzate per generare i parametri di query determinano un ordinamento non deterministico. Questo causa variazioni nell’output di HTML tra le richieste e interrompe il caching basato su ETag.
Risoluzione resolution
Per risolvere il problema, segui la procedura riportata di seguito:
-
Identifica il modello Sling o il codice HTL responsabile della generazione degli URL dell’immagine nel componente interessato, ad esempio l’eroe della homepage o il carosello.
-
Verificare se i parametri di query sono assemblati utilizzando raccolte non ordinate come
HashMap,HashSetoCollectors.toMap(). -
Effettua il refactoring del codice per garantire l’ordinamento deterministico dei parametri:
- Utilizza
TreeMapper ordinare i parametri in base alla chiave, garantendo un ordinamento coerente. - Se è necessario mantenere l’ordine di inserimento, utilizzare
LinkedHashMape assicurarsi che sia coerente tra le richieste.
- Utilizza
-
Distribuisci il componente aggiornato.
-
Verifica che gli URL dell’immagine generati abbiano un ordine dei parametri di query coerente in tutte le istanze e le richieste di pubblicazione.
-
Verificare che i flag ET per la stessa pagina siano identici nelle istanze Publish e che la memorizzazione nella cache di CDN/browser funzioni come previsto, ovvero che vengano restituite
304 Not Modifiedrisposte quando appropriato.