Si verificano errori CORS per le query persistenti di GraphQL in AEM as a Cloud Service

Questo articolo spiega come risolvere i problemi con intestazioni CORS mancanti nelle risposte alle query persistenti di GraphQL in Adobe Experience Manager as a Cloud Service quando è coinvolto il caching a livello di CDN.

Descrizione description

Ambiente

  • Adobe Experience Manager as a Cloud Service
  • Query persistenti GraphQL
  • Memorizzazione nella cache CDN

Problema/Sintomi

  • Gli errori CORS del browser si verificano quando si eseguono richieste tra origini diverse agli endpoint di query persistenti di GraphQL.
  • Le risposte dalla rete CDN potrebbero non disporre delle intestazioni CORS richieste, causando errori nelle richieste provenienti da origini diverse.
  • I browser bloccano le risposte a causa di intestazioni Access-Control-Allow-Origin mancanti, che influiscono sulle integrazioni headless o SPA.

Causa

Le risposte della cache CDN che non includono le intestazioni CORS richieste, anche se la memorizzazione nella cache a livello di dispatcher è disabilitata per l’endpoint. A meno che non venga esplicitamente indicato di non memorizzare in cache, la rete CDN può fornire risposte memorizzate nella cache senza le intestazioni necessarie.

Risoluzione resolution

Per risolvere il problema, segui i passaggi seguenti:

  1. Rivedere la configurazione di Dispatcher e verificare che il caching non sia abilitato per l’endpoint di query persistente di GraphQL /graphql/execute.json/*. La variabile di configurazione che controlla questo comportamento è in genere CACHE_GRAPHQL_PERSISTED_QUERIES. Assicurati che la variabile non sia definita o configurata per impedire la memorizzazione nella cache per questo percorso.

  2. Aggiornare la configurazione Dispatcher vhost per utilizzare mod_headers e impostare l’intestazione Cache-Control su private, no-store, no-cache, must-revalidate, max-age=0 per l’endpoint di query persistente GraphQL.

    code language-none
    Header set Cache-Control "private, no-store, no-cache, must-revalidate, max-age=0"
    
  3. Applica le modifiche alla configurazione e ricarica o riavvia il servizio Dispatcher.

  4. Verificare l’endpoint di query persistente GraphQL inviando una richiesta che include un’intestazione Origin.

  5. Verificare che la risposta includa l’intestazione Access-Control-Allow-Origin prevista.

  6. Verificare che l’intestazione di risposta x-cache restituisca MISS anziché HIT, confermando che la risposta non viene servita dalla cache CDN.

  7. Rivedi la configurazione dei criteri AEM CORS e verifica che com.adobe.granite.cors.impl.CORSPolicyImpl sia configurato per consentire le origini richieste per l’endpoint.

  8. Se la rete CDN ha già memorizzato nella cache una risposta che non include l’intestazione CORS richiesta, elimina o invalida la cache per l’endpoint interessato in modo da garantire che le richieste successive ricevano le intestazioni corrette.

  9. Verifica che le richieste all’endpoint di query persistente GraphQL restituiscano le intestazioni CORS previste e vengano elaborate correttamente.

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