Le intestazioni personalizzate non passano attraverso Dispatcher o influiscono sul comportamento di caching
Le intestazioni di risposta personalizzate come X-Robots-Tag, ETag e le intestazioni di cache personalizzate scompaiono quando una pagina viene distribuita tramite Dispatcher oppure interrompono la memorizzazione nella cache CDN quando è presente una direttiva legacy Vary: User-Agent. Dispatcher inoltra solo le intestazioni di risposta elencate in modo esplicito nella configurazione /cache/headers e /headers e Apache sostituisce alcune intestazioni (ad esempio ETag) a meno che non venga richiesto di rimandare ad AEM. Consentendo l’intestazione nella configurazione della farm, garantendo che Apache la inoltri senza modifiche, rimuovendo la direttiva legacy Vary: User-Agent e cancellando la cache, vengono ripristinati il passthrough e il caching corretti dell’intestazione.
Descrizione description
Ambienti:
- Adobe Experience Manager as a Cloud Service (AEMaaCS)
- AEM Managed Services (AMS)
- Software Adobe Experience Manager On-Premises
- AEM Dispatcher (Apache) e il livello CDN
Problema/Sintomi:
- Un’intestazione è visibile in AEM Publish con
curl -Ima manca in Dispatcher. - La rete CDN non memorizza in cache le pagine a causa di
Vary: User-Agent. - Le intestazioni personalizzate vengono visualizzate solo quando viene aggiunto un parametro di query (
?a=b), perché Dispatcher ignora la cache. ETagè stato perso o modificato, ad esempio Apache che aggiunge-gzip.- Dispatcher restituisce contenuto obsoleto perché le intestazioni memorizzate nella cache non vengono aggiornate.
Causa principale:
Dispatcher inoltra solo le intestazioni di risposta esplicitamente elencate in /cache/headers e /headers. Quando un’intestazione non è presente, Dispatcher la elimina o utilizza metadati di intestazione memorizzati nella cache. Apache sostituisce le intestazioni (ad esempio ETag) a meno che non sia configurato per rimandare ad AEM. Alcune configurazioni legacy di vhost includono Header append Vary User-Agent, che interrompe il caching della rete CDN a causa di un’eccessiva cardinalità di variazione. Le richieste di stringhe di query ignorano la cache, il che fa sì che le intestazioni mancanti vengano visualizzate solo nei percorsi memorizzati nella cache.
Come confermare
- Determina se l’intestazione manca prima o dopo Dispatcher. Esegui
curl -Irispetto agli URL Publish e Dispatcher e confronta i set di intestazioni. Se l’intestazione viene visualizzata su Publish ma è mancante o modificata in Dispatcher, Dispatcher o Apache la sta rimuovendo. Se manca già in Pubblicazione, correggi prima il codice AEM. - Controlla se è coinvolta la cache di Dispatcher. Nuovo test con un parametro di query (
curl -Iin base a un URL con?a=b). Se l’intestazione viene visualizzata solo con il parametro di query, la risorsa viene distribuita dalla cache senza metadati di intestazione memorizzati.
Risoluzione resolution
Per risolvere il problema, segui la procedura riportata di seguito:
-
Consenti l’intestazione per il caching nel file farm. Nel file
.anydella farm di pubblicazione, aggiungere il nome dell’intestazione al blocco/cache/headers(ad esempio:X-Robots-Tag,ETagoEdge-Cache-Tag). Dopo un riavvio e la cancellazione della cache, eseguirecurl -Ie confermare che l’intestazione venga visualizzata. -
Assicurati che Apache inoltri l’intestazione senza sovrascriverla. Per AMS e on-premise, modifica il vhost:
- Per
ETag, aggiungereFileETag NoneeHeader unset ETag. - Per un’intestazione personalizzata, impostare
SetEnvIfNoCase X-Robots-Tag "(.+)$" X_ROBOTS_TAG=$1eHeader always set X-Robots-Tag "%{X-Robots-Tag}e" env=X_ROBOTS_TAG.
- Per
Esegui apachectl -t, riavvia il servizio e conferma che curl -I mostri l’intestazione.
3. Consenti l’intestazione per l’inoltro (non la memorizzazione in cache) nel file farm. Aggiungi l’intestazione al blocco /headers in modo che Dispatcher la inoltri al client anche quando la risposta non è memorizzata nella cache, quindi conferma con curl -I.
4. Rimuovi la direttiva legacy Vary: User-Agent. Cerca nelle directory vhost con grep -R "Vary User-Agent" . e commenta eventuali istanze trovate, in modo che la rete CDN riprenda a memorizzare nella cache le risposte.
5. Cancella la cache dopo le modifiche alla configurazione. In AEMaaCS, utilizza Ambiente → Cloud Manager → Cancella cache. In AMS o on-premise, rimuovi i file memorizzati in cache in <dispatcher_cache_path> o attiva uno scaricamento dell’attivazione, quindi riavvia Apache. Conferma curl -I mostra l’intestazione corretta.
6. Convalida il mapping tra domini e farm. Conferma che vhost includa il dominio richiesto in modo che Dispatcher utilizzi la farm di pubblicazione corretta con le regole di intestazione. Controllare i registri di Dispatcher per Nessuna farm corrisponde all’host. Se viene visualizzato, aggiungere il dominio al vhost ServerName o ServerAlias e riprovare.
Convalida
- Eseguire
curl -Isull’URL di Dispatcher e verificare che l’intestazione sia presente e corrisponda a Pubblica. - Verificare che il file di metadati nella cache (
<path>.headers) sia stato creato nella directory della cache di Dispatcher. - Conferma che non rimangano intestazioni non desiderate (ad esempio
Vary: User-Agent) nei vhosts e controlla il rapporto di hit della cache CDN prima e dopo la modifica.