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-Origin manquants, 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 :

  1. 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éralement CACHE_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.

  2. Mettez à jour la configuration vhost de Dispatcher pour utiliser mod_headers et définissez l’en-tête Cache-Control sur private, no-store, no-cache, must-revalidate, max-age=0 pour 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"
    
  3. Appliquez les modifications de configuration et rechargez ou redémarrez le service Dispatcher.

  4. Testez le point d’entrée de la requête persistante GraphQL en envoyant une requête qui inclut un en-tête Origin.

  5. Vérifiez que la réponse inclut l’en-tête Access-Control-Allow-Origin attendu.

  6. Vérifiez que l’en-tête de réponse x-cache renvoie MISS au lieu de HIT, en confirmant que la réponse n’est pas diffusée à partir du cache du réseau CDN.

  7. Passez en revue la configuration de la politique CORS d’AEM et vérifiez que com.adobe.granite.cors.impl.CORSPolicyImpl est configuré de manière à autoriser les origines requises pour le point d’entrée .

  8. 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.

  9. 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.

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