Des erreurs CORS se produisent pour les requêtes persistantes GraphQL dans AEM as a Cloud Service
Cet article explique comment résoudre les problèmes liés aux en-têtes CORS manquants dans les réponses aux requêtes persistantes de GraphQL dans Adobe Experience Manager as a Cloud Service lorsque la mise en cache au niveau du réseau CDN est impliquée.
Description description
Environnement
- Adobe Experience Manager as a Cloud Service
- Requêtes persistantes GraphQL
- Mise en cache CDN
Problème/Symptômes
- Les erreurs CORS du navigateur se produisent lors de requêtes inter-origines vers des points d’entrée de requête persistante GraphQL.
- Les réponses du réseau CDN peuvent ne pas contenir les en-têtes CORS requis, ce qui entraîne l’échec des requêtes provenant de différentes origines.
- Les navigateurs bloquent les réponses en raison d’en-têtes
Access-Control-Allow-Originmanquants, ce qui a un impact sur les intégrations découplées ou SPA.
Cause
Les réponses du cache CDN qui n’incluent pas les en-têtes CORS requis, même si la mise en cache au niveau du Dispatcher est désactivée pour le point d’entrée . Sauf si vous avez explicitement reçu l’instruction de ne pas mettre en cache, le réseau CDN peut diffuser des réponses mises en cache sans les en-têtes nécessaires.
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.