Beheben von fehlenden CORS-Headern für persistierte Abfragen von GraphQL in AEM as a Cloud Service

In diesem Artikel wird beschrieben, wie Sie fehlende CORS-Header in persistierten Abfrageantworten von GraphQL in Adobe Experience Manager as a Cloud Service beheben können, wenn die CDN-Caching-Funktion Probleme verursacht. Die Lösung umfasst die Aktualisierung von Cache-Steuerungs-Headern, um CDN-Caching zu verhindern und sicherzustellen, dass CORS-Header vorhanden sind.

Beschreibung description

Umgebung

  • Adobe Experience Manager as a Cloud Service-Veröffentlichung oder -Vorschau
  • GraphQL-Endpunkt für persistierte Abfragen: /graphql/execute.json/*
  • Browserübergreifender Zugriff über das von Adobe verwaltete CDN

Problem/Symptome

  • Ein Browser meldet einen CORS-Fehler, wenn eine ursprungsübergreifende Anwendung eine GraphQL-persistierte Abfrage anfordert.
  • Die Anfrage enthält eine Origin Kopfzeile, aber die CDN-Antwort enthält nicht die erforderliche Access-Control-Allow-Origin Kopfzeile.
  • Wiederholte Anfragen von verschiedenen Ursprüngen erhalten eine zwischengespeicherte Antwort ohne die erforderliche CORS-Kopfzeile. Die Antwort-Header zeigen eine Cache-HIT und einen Age ungleich null.
  • Die Dispatcher-Zwischenspeicherung für den Endpunkt der persistierten Abfrage ist deaktiviert, aber das von Adobe verwaltete CDN stellt weiterhin eine zwischengespeicherte Antwort bereit.
  • Eine OSGi-CORS-Richtlinie ist in AEM konfiguriert, aber der Veröffentlichungsantwort fehlt weiterhin der CORS-Header.

Ursache

Das von Adobe verwaltete CDN speichert eine Antwort der persistierten Abfrage von GraphQL ohne Access-Control-Allow-Origin zwischen und stellt diese Antwort auf spätere Anfragen für dieselbe URL bereit. Durch Deaktivieren der Dispatcher-Zwischenspeicherung wird die Adobe-CDN-Zwischenspeicherung nicht deaktiviert. Für „Veröffentlichen“ und „Vorschau“ konfigurieren Sie CORS im Dispatcher-vhost. Die Veröffentlichungs- und Vorschau-Services verwenden für diese Konfiguration nicht die OSGi-CORS-Richtlinie.

Lösung resolution

Gehen Sie wie folgt vor, um das Problem zu beheben:

  1. Überprüfen Sie die Dispatcher-Konfiguration und stellen Sie sicher, dass die Zwischenspeicherung für den Endpunkt der persistierten Abfrage von GraphQL nicht aktiviert /graphql/execute.json/*. Die Konfigurationsvariable, die dieses Verhalten steuert, wird in der Regel CACHE_GRAPHQL_PERSISTED_QUERIES. Stellen Sie sicher, dass die Variable nicht definiert oder konfiguriert ist, um das Caching für diesen Pfad zu verhindern.

  2. Aktualisieren Sie die Dispatcher-vhost-Konfiguration, um mod_headers zu verwenden, und legen Sie die Cache-Control-Kopfzeile für den Endpunkt der persistierten Abfrage von GraphQL auf private, no-store, no-cache, must-revalidate, max-age=0 fest.

    code language-none
    Header set Cache-Control “private, no-store, no-cache, must-revalidate, max-age=0”
    
  3. Wenden Sie die Konfigurationsänderungen an und laden Sie den Dispatcher-Service neu oder starten Sie ihn neu.

  4. Testen Sie den Endpunkt der persistierten Abfrage von GraphQL, indem Sie eine Anfrage senden, die eine Origin-Kopfzeile enthält.

  5. Vergewissern Sie sich, dass die Antwort die erwartete Access-Control-Allow-Origin-Kopfzeile enthält.

  6. Vergewissern Sie sich, dass der x-cache-Antwort-Header MISS anstelle von HIT zurückgibt und so bestätigt, dass die Antwort nicht aus dem CDN-Cache bereitgestellt wird.

  7. Überprüfen Sie die Konfiguration der AEM-CORS-Richtlinie und stellen Sie sicher, dass com.adobe.granite.cors.impl.CORSPolicyImpl so konfiguriert ist, dass die erforderlichen Ursprünge für den Endpunkt zulässig sind.

  8. Wenn das CDN bereits eine Antwort zwischengespeichert hat, die die erforderliche CORS-Kopfzeile nicht enthält, löschen oder invalidieren Sie den Cache für den betroffenen Endpunkt, um sicherzustellen, dass nachfolgende Anfragen die richtigen Kopfzeilen erhalten.

  9. Überprüfen Sie, ob Anfragen an den Endpunkt der persistierten Abfrage von GraphQL die erwarteten CORS-Header zurückgeben und erfolgreich verarbeitet wurden.

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