Correction des en-têtes CORS manquants pour les requêtes persistantes GraphQL dans AEM as a Cloud Service
Cet article décrit comment résoudre les en-têtes CORS manquants sur les réponses aux requêtes persistantes de GraphQL dans Adobe Experience Manager as a Cloud Service lorsque la mise en cache du réseau CDN interfère. La solution implique la mise à jour des en-têtes de contrôle du cache pour empêcher la mise en cache CDN et s’assurer que les en-têtes CORS sont présents.
Description description
Environnement
- Publication ou prévisualisation Adobe Experience Manager as a Cloud Service
- Point d’entrée de requête persistante GraphQL :
/graphql/execute.json/* - Accès au navigateur entre origines multiples via le réseau CDN géré par Adobe
Problème/Symptômes
- Un navigateur signale une erreur CORS lorsqu’une application cross-origin demande une requête persistante GraphQL.
- La requête comprend un en-tête
Origin, mais la réponse du réseau CDN n’inclut pas l’en-têteAccess-Control-Allow-Originrequis. - Les requêtes répétées provenant de différentes origines reçoivent une réponse mise en cache sans l’en-tête CORS requis. Les en-têtes de réponse affichent un
HITde cache et unAgedifférent de zéro. - La mise en cache du Dispatcher pour le point d’entrée de la requête persistante est désactivée, mais le réseau CDN géré par Adobe diffuse toujours une réponse mise en cache.
- Une politique CORS OSGi est configurée dans AEM, mais l’en-tête CORS manque toujours dans la réponse de publication.
Cause
Le réseau CDN géré par Adobe a mis en cache une réponse de requête persistante GraphQL sans Access-Control-Allow-Origin et a diffusé cette réponse en cache aux requêtes ultérieures pour la même URL. La désactivation de la mise en cache du Dispatcher ne désactive pas la mise en cache du réseau CDN Adobe. Pour la publication et la prévisualisation, configurez la politique CORS dans le vhost de Dispatcher. Les services de publication et de prévisualisation n’utilisent pas la politique CORS OSGi pour cette configuration.
Résolution resolution
Suivez les étapes ci-dessous pour résoudre le problème :
-
Passez en revue la configuration de Dispatcher et vérifiez que la mise en cache n’est pas activée pour le point d’entrée de requête persistante de GraphQL
/graphql/execute.json/*. La variable de configuration qui contrôle ce comportement est généralementCACHE_GRAPHQL_PERSISTED_QUERIES. Assurez-vous que la variable n’est pas définie ou configurée pour empêcher la mise en cache de ce chemin d’accès. -
Mettez à jour la configuration vhost de Dispatcher pour utiliser
mod_headerset définissez l’en-têteCache-Controlsurprivate, no-store, no-cache, must-revalidate, max-age=0pour le point d’entrée de la requête persistante de GraphQL.code language-none Header set Cache-Control “private, no-store, no-cache, must-revalidate, max-age=0” -
Appliquez les modifications de configuration et rechargez ou redémarrez le service Dispatcher.
-
Testez le point d’entrée de la requête persistante GraphQL en envoyant une requête qui inclut un en-tête
Origin. -
Vérifiez que la réponse inclut l’en-tête
Access-Control-Allow-Originattendu. -
Vérifiez que l’en-tête de réponse
x-cacherenvoieMISSau lieu deHIT, en confirmant que la réponse n’est pas diffusée à partir du cache du réseau CDN. -
Passez en revue la configuration de la politique CORS d’AEM et vérifiez que
com.adobe.granite.cors.impl.CORSPolicyImplest configuré de manière à autoriser les origines requises pour le point d’entrée . -
Si le réseau CDN a déjà mis en cache une réponse qui n’inclut pas l’en-tête CORS requis, purgez ou invalidez le cache pour le point d’entrée affecté afin de vous assurer que les requêtes suivantes reçoivent les en-têtes corrects.
-
Vérifiez que les requêtes envoyées au point d’entrée de la requête persistante GraphQL renvoient les en-têtes CORS attendus et sont traitées avec succès.