Erreur inconnue dans le panneau "Essayer ce API"

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Problème constaté

L'appel d'API du portail des développeurs intégré échoue avec Unknown Error ou une réponse vide dans le panneau Essayer cette API.

Messages d'erreur

Il est possible qu'une réponse vide ou le message d'erreur suivant s'affiche pour les requêtes API dans le portail intégré:

Unknown Error

Dans l'onglet Outils de développement > Console, l'erreur suivante s'affiche:

Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.

Voici un message d'erreur générique qui s'affiche dans l'onglet Outils de développement > Console:

message d'erreur générique, cliquez pour agrandir l'image message d'erreur générique

Causes possibles

Cause Description Instructions de dépannage applicables
Défaillance liée à la stratégie non gérée Une réponse d'erreur par défaut est envoyée sans en-têtes CORS, en cas d'échec d'une règle dans le flux d'exécution de la requête API. Utilisateurs de Edge Public Cloud
Plusieurs valeurs pour Access-Control-Allow-Origin Utilisez "Ajouter" au lieu de "Définir" dans "Attribuer une stratégie de message". Utilisateurs de Edge Public Cloud

Cause: erreur de stratégie non gérée

Diagnostic

  1. Vérifiez que le problème ne se produit que si une réponse non-2XX est attendue.
  2. Pour les requêtes ayant échoué, vérifiez que le flux proxy contient des règles.
  3. Suivez la requête et vérifiez si une stratégie avec continueOnError="false" échoue et génère une erreur.
    1. Le cas échéant, vérifiez si la règle CORS AttributionMessage a été exécutée ou non dans le flux de réponse en cas d'erreur.
    2. Si ce n'est pas le cas, c'est la cause du problème.
      En effet, lorsqu'une stratégie comportant l'élément continueOnError="false" échoue, la requête entre dans le flux de réponse en cas d'erreur. En l'absence de gestion explicite des erreurs dans le flux de réponse d'erreur, la réponse d'erreur par défaut correspondant à la stratégie est renvoyée. Cette réponse d'erreur ne contient aucun en-tête CORS. Par conséquent, l'appel d'API du portail des développeurs intégré échoue avec Unknown error.

Les captures d'écran suivantes présentent un exemple de message d'erreur et un exemple de message de réussite.

Exemple de message d'erreur dans le panneau Essayer cette API du portail intégré et dans la fenêtre Trace du proxy:

exemple de message d'erreur, cliquez pour agrandir l'image exemple de message d'erreur

Exemple de message de confirmation dans le panneau Essayer cette API du portail intégré et dans la fenêtre Trace du proxy:

Exemple de message de confirmation, cliquez pour agrandir l'image exemple de message de réussite

Résolution

  1. Au lieu de s'appuyer sur le message d'erreur par défaut, une règle d'erreur doit être mise en œuvre pour gérer la réponse d'erreur. Incluez une règle CORS AttributionMessage avec les en-têtes appropriés et appelez-la dans FaultRule.
  2. Il peut parfois être impossible de définir une règle d'erreur pour chaque défaut. Par conséquent, une règle d'erreur par défaut peut être mise en œuvre pour exécuter la stratégie CORS AttributionMessage:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
    <Description/>
    <!-- Add a default fault rule to add CORS -->
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>add-cors</Name>
        </Step>
    </DefaultFaultRule>
    <FaultRules/>
    <!--
    <Flows />
    Rest of the proxy definition
    -->
</ProxyEndpoint>

Cause: plusieurs valeurs pour Access-Control-Allow-Origin

Diagnostic

  1. Vérifiez la valeur de l'en-tête Access-Control-Allow-Origin dans une session de trace.
  2. L'en-tête Access-Control-Allow-Origin ne permet de définir qu'une seule valeur. La définition de plusieurs valeurs peut entraîner un problème CORS, et le portail des développeurs ne pourra pas afficher les réponses.
  3. Si la valeur de l'en-tête Access-Control-Allow-Origin dans la trace ressemble à ceci:
    *,*
    Cela signifie que le serveur cible et la règle CORS d'AssignMessage définissent tous deux sa valeur.
  4. Cela peut se produire lorsqu'un utilisateur a utilisé le paramètre <Add> element pour Access-Control-Allow-Origin dans une règle, ou si le backend lui-même définit plusieurs valeurs.

Exemple de valeur Access-Control-Allow-Origin égale à *,*:

exemple, plusieurs valeurs utilisées, cliquez pour agrandir l&#39;image exemple de plusieurs valeurs utilisées

Exemple de valeur Access-Control-Allow-Origin égale à *:

exemple de valeur unique utilisée, cliquez pour agrandir l&#39;image exemple de valeur unique utilisé

Exemple avec <Add>:

exemple avec &quot;Ajouter&quot;, cliquez pour agrandir l&#39;image exemple Utilisation de la fonction Add

Exemple avec <Set>:

exemple avec Set, cliquez pour agrandir l&#39;image exemple avec &quot;Set&quot;

Résolution

  1. L'approche recommandée consiste à utiliser <Set> element (au lieu de <Add> element) pour Access-Control-Allow-Origin, car une seule valeur est autorisée.
  2. Vous pouvez également définir l'en-tête Access-Control-Allow-Origin à un seul endroit : la règle CORS d'AssignMessage ou le serveur cible.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors">
    <DisplayName>Set CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Si vous avez encore besoin d'aide de l'assistance Apigee, consultez la section Vous devez recueillir des informations de diagnostic.

Vous devez collecter des informations de diagnostic

Rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee Edge:

  • Le nom de l'organisation.
  • Nom de l'environnement
  • Nom du proxy d'API
  • Commande curl complète utilisée pour reproduire l'erreur
  • Fichier de suivi des requêtes API
  • Résultat complet de la réponse du serveur cible/backend, ainsi que la taille de la charge utile