Correzione delle intestazioni CORS mancanti per le query persistenti GraphQL in AEM as a Cloud Service

Questo articolo descrive come risolvere le intestazioni CORS mancanti nelle risposte alle query persistenti di GraphQL in Adobe Experience Manager as a Cloud Service quando interferisce con il caching CDN. La soluzione prevede l’aggiornamento delle intestazioni di controllo cache per impedire il caching CDN e garantire la presenza di intestazioni CORS.

Descrizione description

Ambiente

  • Pubblicazione o anteprima Adobe Experience Manager as a Cloud Service
  • Endpoint di query persistente GraphQL: /graphql/execute.json/*
  • Accesso browser tra origini tramite la rete CDN gestita da Adobe

Problema/Sintomi

  • Un browser segnala un errore CORS quando un’applicazione tra origini richiede una query persistente GraphQL.
  • La richiesta include un’intestazione Origin, ma la risposta CDN non include l’intestazione Access-Control-Allow-Origin richiesta.
  • Le richieste ripetute da origini diverse ricevono una risposta dalla cache senza l’intestazione CORS richiesta. Le intestazioni di risposta mostrano una cache HIT e un valore diverso da zero Age.
  • La memorizzazione nella cache di Dispatcher per l’endpoint di query persistente è disabilitata, ma la rete CDN gestita da Adobe fornisce ancora una risposta memorizzata nella cache.
  • In AEM è configurato un criterio OSGi CORS, ma nella risposta Publish manca ancora l’intestazione CORS.

Causa

La rete CDN gestita da Adobe ha memorizzato nella cache una risposta di query persistente di GraphQL senza Access-Control-Allow-Origin e ha trasmesso tale risposta memorizzata nella cache alle richieste successive per lo stesso URL. La disabilitazione della memorizzazione in cache di Dispatcher non disattiva la memorizzazione in cache CDN di Adobe. Per Pubblica e Anteprima, configura CORS in Dispatcher vhost; i servizi Pubblica e Anteprima non utilizzano i criteri OSGi CORS per questa configurazione.

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