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’intestazioneAccess-Control-Allow-Originrichiesta. - Le richieste ripetute da origini diverse ricevono una risposta dalla cache senza l’intestazione CORS richiesta. Le intestazioni di risposta mostrano una cache
HITe un valore diverso da zeroAge. - 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:
-
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 genereCACHE_GRAPHQL_PERSISTED_QUERIES. Assicurati che la variabile non sia definita o configurata per impedire la memorizzazione nella cache per questo percorso. -
Aggiornare la configurazione Dispatcher vhost per utilizzare
mod_headerse impostare l’intestazioneCache-Controlsuprivate, no-store, no-cache, must-revalidate, max-age=0per l’endpoint di query persistente GraphQL.code language-none Header set Cache-Control “private, no-store, no-cache, must-revalidate, max-age=0” -
Applica le modifiche alla configurazione e ricarica o riavvia il servizio Dispatcher.
-
Verificare l’endpoint di query persistente GraphQL inviando una richiesta che include un’intestazione
Origin. -
Verificare che la risposta includa l’intestazione
Access-Control-Allow-Originprevista. -
Verificare che l’intestazione di risposta
x-cacherestituiscaMISSanzichéHIT, confermando che la risposta non viene servita dalla cache CDN. -
Rivedi la configurazione dei criteri AEM CORS e verifica che
com.adobe.granite.cors.impl.CORSPolicyImplsia configurato per consentire le origini richieste per l’endpoint. -
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.
-
Verifica che le richieste all’endpoint di query persistente GraphQL restituiscano le intestazioni CORS previste e vengano elaborate correttamente.