Benutzerdefinierte Kopfzeilen, die nicht über Dispatcher laufen oder das Caching-Verhalten beeinflussen

Benutzerdefinierte Antwort-Header wie X-Robots-Tag, ETag und benutzerdefinierte Cache-Header verschwinden, wenn eine Seite über die Dispatcher bereitgestellt wird, oder sie unterbrechen das CDN-Caching, wenn eine alte Vary: User-Agent-Anweisung vorhanden ist. Der Dispatcher leitet nur Antwort-Header weiter, die explizit in der /cache/headers- und /headers-Konfiguration aufgeführt sind, und Apache überschreibt einige Header (wie ETag), es sei denn, er wird aufgefordert, sich an AEM zu wenden. Wenn Sie den -Header in der Farm-Konfiguration zulassen, sicherstellen, dass Apache ihn unverändert weiterleitet, die alte Vary: User-Agent-Direktive entfernen und den Cache löschen, werden der richtige Header-Passthrough und das richtige Caching wiederhergestellt.

Beschreibung description

Umgebungen:

  • Adobe Experience Manager as a Cloud Service (AEMaaCS)
  • AEM Managed Services (AMS)
  • Adobe Experience Manager On-Premise-Software
  • AEM Dispatcher (Apache) und die CDN-Ebene

Problem/Symptome:

  • In der AEM-Veröffentlichungsinstanz ist eine Kopfzeile mit curl -I sichtbar, in der Dispatcher fehlt sie jedoch.
  • Das CDN speichert Seiten aufgrund von Vary: User-Agent nicht zwischen.
  • Benutzerdefinierte Kopfzeilen werden nur angezeigt, wenn ein Abfrageparameter (?a=b) hinzugefügt wird, da der Dispatcher den Cache umgeht.
  • Der ETag geht verloren oder wird geändert, z. B. Apache--gzip.
  • Die Dispatcher gibt veraltete Inhalte zurück, da zwischengespeicherte Kopfzeilen nicht aktualisiert werden.

Grundursache:

Dispatcher leitet nur Antwort-Header weiter, die explizit in /cache/headers und /headers aufgeführt sind. Wenn keine Kopfzeile vorhanden ist, entfernt Dispatcher diese oder verwendet zwischengespeicherte Kopfzeilen-Metadaten. Apache überschreibt Header (z. B. ETag), es sei denn, sie sind so konfiguriert, dass sie auf AEM verweisen. Einige veraltete vhost-Konfigurationen umfassen Header append Vary User-Agent, wodurch das CDN-Caching aufgrund einer übermäßigen Variantenkardinalität unterbrochen wird. Abfragezeichenfolgen-Anfragen umgehen den Cache, wodurch fehlende Kopfzeilen nur in zwischengespeicherten Pfaden angezeigt werden.

Wie kann ich bestätigen

  1. Stellen Sie fest, ob die Kopfzeile vor oder nach der Dispatcher fehlt. Führen Sie curl -I sowohl für die Veröffentlichungs- als auch für die Dispatcher-URLs aus und vergleichen Sie die Kopfzeilensätze. Wenn die Kopfzeile auf der Veröffentlichungsinstanz angezeigt wird, auf der Dispatcher jedoch fehlt oder geändert wird, wird sie von Dispatcher oder Apache entfernt. Wenn er bereits in der Veröffentlichungsinstanz fehlt, beheben Sie zuerst den AEM-Code.
  2. Überprüfen Sie, ob der Dispatcher-Cache beteiligt ist. Erneuter Test mit einem Abfrageparameter (curl -I mit einer URL mit ?a=b). Wenn der Header nur mit dem Abfrageparameter angezeigt wird, wird die Ressource aus dem Cache ohne gespeicherte Header-Metadaten bereitgestellt.

Lösung resolution

Führen Sie zur Behebung des Problems folgende Schritte aus:

  1. Zulassen, dass der Header in der Farm-Datei zwischengespeichert wird. Fügen Sie in der .any der Veröffentlichungsfarm den Header-Namen zum /cache/headers hinzu (z. B.: X-Robots-Tag, ETag oder Edge-Cache-Tag). Nachdem ein Neustart durchgeführt und der Cache gelöscht wurde, führen Sie curl -I aus und bestätigen Sie, dass die Kopfzeile angezeigt wird.

  2. Stellen Sie sicher, dass Apache den Header weiterleitet, ohne ihn zu überschreiben. Bearbeiten Sie bei AMS und On-Premise den vhost:

    • Fügen Sie ETag FileETag None und Header unset ETag hinzu.
    • Legen Sie für eine benutzerdefinierte Kopfzeile SetEnvIfNoCase X-Robots-Tag "(.+)$" X_ROBOTS_TAG=$1 und Header always set X-Robots-Tag "%{X-Robots-Tag}e" env=X_ROBOTS_TAG.

Führen Sie apachectl -t aus, starten Sie den Service neu und bestätigen Sie, curl -I die Kopfzeile angezeigt wird.
​3. Lassen Sie die Kopfzeile für die Weiterleitung (nicht für das Caching) in der Farm-Datei zu. Fügen Sie die Kopfzeile zum /headers hinzu, damit die Dispatcher sie an den Client weiterleitet, selbst wenn die Antwort nicht zwischengespeichert wird, und bestätigen Sie dann mit curl -I.
​4. Entfernen Sie die alte Vary: User-Agent. Durchsuchen Sie die vhost-Verzeichnisse mit grep -R "Vary User-Agent" . und kommentieren Sie alle gefundenen Instanzen aus, damit das CDN das Zwischenspeichern von Antworten fortsetzt.
​5. Löschen Sie den Cache nach den Konfigurationsänderungen. Verwenden Sie auf AEMaaCS Cloud Manager →-Umgebung → Cache löschen. Entfernen Sie auf AMS oder On-Premise die zwischengespeicherten Dateien auf dem <dispatcher_cache_path> oder Trigger einer Aktivierungsflush-Benachrichtigung und starten Sie dann Apache neu. Bestätigen curl -I zeigt die richtige Kopfzeile an.
​6. Validieren Sie die Zuordnung von Domain zu Farm. Bestätigen Sie, dass vhost die angeforderte Domain enthält, damit die Dispatcher die richtige Veröffentlichungsfarm mit den Kopfzeilenregeln verwendet. Überprüfen Sie die Dispatcher-Protokolle auf Keine Farm stimmt mit Host überein. Wenn dies angezeigt wird, fügen Sie die Domain zum vhost-ServerName oder ServerAlias hinzu und versuchen Sie es erneut.

Validierung

  1. Führen Sie curl -I mit der Dispatcher-URL aus und bestätigen Sie, dass der Header vorhanden ist und mit „Veröffentlichen“ übereinstimmt.
  2. Bestätigen Sie, dass die zwischengespeicherte Metadatendatei (<path>.headers) im Cache-Verzeichnis von Dispatcher erstellt wurde.
  3. Vergewissern Sie sich, dass keine unbeabsichtigten Kopfzeilen (z. B. Vary: User-Agent) in den virtuellen Hosts verbleiben, und überprüfen Sie die CDN-Cache-Trefferquote vor und nach der Änderung.

Verwandtes Lesen

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