415 Types de support non pris en charge - Encodage non pris en charge

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

Problème constaté

En réponse à des appels d'API, l'application cliente obtient un code d'état HTTP 415 Unsupported Media Type avec le code d'erreur protocol.http.UnsupportedEncoding .

Message d'erreur

L'application cliente reçoit le code de réponse suivant:

HTTP/1.1 415 Unsupported Media Type

En outre, un message d'erreur semblable à celui présenté ci-dessous peut s'afficher:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

Causes possibles

Cette erreur se produit si la valeur de l'en-tête Content-Encoding spécifiée dans la requête HTTP envoyée par le client à Apigee ou dans la réponse HTTP envoyée par le serveur backend à Apigee ne contient pas l'encodage accepté par Apigee, conformément à la spécification RFC 7231, section 6.5.13: 415 Unsupported Media Type.

Causes possibles de cette erreur:

Cause Description Instructions de dépannage applicables
Encodage non compatible utilisé dans la requête L'en-tête de requête Content-Encoding contient un encodage qui n'est pas pris en charge par Apigee Edge. Utilisateurs Edge Public and Private Cloud
Encodage non compatible utilisé dans la réponse L'en-tête de réponse du serveur backend Content-Encoding contient un encodage qui n'est pas pris en charge par Apigee Edge. Utilisateurs Edge Public and Private Cloud

Étapes de diagnostic courantes

Pour diagnostiquer l'erreur, vous pouvez utiliser l'une des méthodes suivantes:

Surveillance des API

Pour diagnostiquer l'erreur à l'aide de la surveillance des API:

  1. Connectez-vous à votre compte Apigee Edge.
  2. Accédez à l'organisation dans laquelle vous souhaitez examiner le problème:

    liste déroulante UI org
  3. Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Enquêter).
  4. Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
  5. Assurez-vous que le filtre Proxy est défini sur Tous.
  6. Tracez le code d'erreur par rapport à l'heure.
  7. Sélectionnez une cellule avec le code d'erreur protocol.http.UnsupportedEncoding, comme indiqué ci-dessous:

    cellule de code d'erreur sélectionnée
  8. Les informations sur le code d'erreur protocol.http.UnsupportedEncoding sont affichées comme indiqué ci-dessous:

  9. Cliquez sur Afficher les journaux , puis développez l'une des requêtes ayant échoué avec l'erreur 415 pour afficher plus d'informations:

  10. Dans la fenêtre Journaux, notez les détails suivants :
    • Fault Source (Source d'erreur) : indique que l'erreur est renvoyée par apigee ou target.
    • Code d'erreur:il doit correspondre à protocol.http.UnsupportedEncoding.
  11. Si la valeur de Fault Source est apigee, cela signifie que la requête contient un encodage non compatible dans l'en-tête Content-Encoding.
  12. Si la source d'erreur est target, cela signifie que la réponse du serveur backend contenait un encodage non compatible dans l'en-tête Content-Encoding.

Outil de traçage

Pour diagnostiquer l'erreur à l'aide de l'outil Trace:

  1. Activez la session de trace, puis effectuez l'une des opérations suivantes :
    • Attendez que l'erreur 415 Unsupported Media Type se produise.
    • Si vous pouvez reproduire le problème, effectuez l'appel d'API pour reproduire l'erreur 415 Unsupported Media Type.
  2. Assurez-vous que l'option Show all FlowInfos (Afficher tous les FlowInfos) est activée:

    afficher le volet des options, afficher tous les flowinfos
  3. Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
  4. Parcourez les différentes phases de la trace et localisez l'origine de l'échec.
  5. L'erreur apparaît généralement dans un flux après la phase Request sent to target server (Requête envoyée au serveur cible), comme indiqué ci-dessous:

  6. Notez la valeur de l'erreur dans la trace.

    L'exemple de trace ci-dessus affiche l'erreur sous la forme Unsupported Encoding "utf-8". Étant donné que l'erreur est générée par Apigee après l'envoi de la requête au serveur backend, cela indique que celui-ci a envoyé l'en-tête de réponse Content-Encoding avec la valeur "utf-8", qui n'est pas un encodage compatible dans Apigee.

  7. Accédez à la phase AX (Données analytiques enregistrées) dans la trace et cliquez dessus.
  8. Faites défiler la page jusqu'à la section Error / Response Headers (En-têtes d'erreur/de réponse) du panneau Phase Details (Détails de la phase) et déterminez les valeurs de X-Apigee-fault-code et de X-Apigee-fault-source, comme indiqué ci-dessous:

  9. Vous verrez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source comme protocol.http.UnsupportedEncoding et target, ce qui indique que cette erreur est causée par le fait que la valeur d'encodage non acceptée de "utf-8" a été transmise par le serveur backend dans l'en-tête de réponse Content-Encoding.

    En-têtes de réponse Valeur
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Vérifiez si vous utilisez un chaînage de proxy, c'est-à-dire si le serveur ou le point de terminaison cible appelle un autre proxy dans Apigee.
    1. Pour déterminer cela, revenez à la phase Request sent to target server (Requête envoyée au serveur cible). Cliquez sur Show Curl (Afficher le bouclage).

    2. La fenêtre Curl for Request Sent to Target Server (Curl de la requête envoyée au serveur cible) s'ouvre. Elle vous permet de déterminer l'alias de l'hôte du serveur cible.
    3. Si l'alias d'hôte du serveur cible pointe vers un alias d'hôte virtuel, il s'agit d'un chaînage de proxy. Dans ce cas, vous devez répéter toutes les étapes ci-dessus pour le proxy en chaîne jusqu'à ce que vous déterminiez la cause de l'erreur 415 Unsupported Media Type.
    4. Si l'alias de l'hôte du serveur cible pointe vers votre serveur backend, cela signifie que celui-ci transmet l'encodage non compatible à Apigee.

Journaux d'accès Nginix

Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX, procédez comme suit:

  1. Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations essentielles sur les erreurs HTTP 415.
  2. Vérifiez les journaux d'accès NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Recherchez les erreurs 415 pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec 415.
  4. Si vous trouvez des erreurs 415 avec le X-Apigee-fault-code correspondant à la valeur de protocol.http.UnsupportedEncoding, déterminez la valeur de X-Apigee-fault-code

    Exemple d'erreur 415 du journal d'accès NGINX:

    L'exemple d'entrée ci-dessus du journal d'accès NGINX contient les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-source :

    En-têtes de réponse Valeur
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    X-Apigee-fault-source peut également avoir laX-Apigee-fault-source valeurX-Apigee-fault-source

Cause: encodage non accepté dans la requête

Diagnostic

  1. Déterminez le code d'erreur et la source de l'erreur de l'erreur observée à l'aide de l'API Monitoring ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes.
  2. Si le code d'erreur est protocol.http.UnsupportedEncoding et que la source d'erreur a la valeur apigee ou MP, cela signifie que la requête envoyée par l'application cliente contient un encodage non compatible dans l'en-tête de requête Content-Encoding.
  3. Vous pouvez déterminer la valeur de l'encodage non accepté transmis dans la requête HTTP à l'aide de l'une des méthodes suivantes:

    Message d'erreur

    Utilisation du message d'erreur:
    1. Si vous avez accès au message d'erreur complet reçu d'Apigee Edge, reportez-vous au faultstring. faultstring contient la valeur du codage de fin non compatible.

      Exemple de message d'erreur:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Dans le message d'erreur ci-dessus, notez que la valeur de l'encodage non compatible est “UTF-8”, comme indiqué dans faultstring.

      Étant donné que “UTF-8” n'est pas un encodage compatible dans Apigee Edge, cette requête échoue et renvoie l'erreur 415 Unsupported Media Type avec le code d'erreur suivant : protocol.http.UnsupportedEncoding.

    Demande réelle

    Avec la requête réelle:
    1. Si vous n'avez pas accès à la requête réelle envoyée par l'application cliente, passez à la section Résolution.
    2. Si vous avez accès à la requête réelle envoyée par l'application cliente, procédez comme suit :
      1. Déterminer la valeur transmise à l'en-tête de requête Content-Encoding.
      2. Si la valeur transmise à l'en-tête de requête Content-Encoding n'est pas l'une des valeurs listées dans Encodage compatible, c'est la cause de cette erreur.

        Exemple de requête:

        curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz
        

        L'exemple de requête ci-dessus envoie la valeur "UTF-8" à l'en-tête Content- Encoding, qui n'est pas un encodage compatible dans Apigee Edge. Par conséquent, cette requête échoue avec une erreur 415 Unsupported Media Type avec le code d'erreur suivant : protocol.http.UnsupportedEncoding.

Résolution

  1. Reportez-vous à la liste des encodages acceptés par Apigee dans Encodage compatible.
  2. Assurez-vous que l'application cliente envoie toujours les éléments suivants :
    • Seul l'encodage compatible comme valeur de l'en-tête Content-Encoding dans la requête
    • La charge utile de la requête au format compatible avec Apigee Edge et correspond au format spécifié dans l'en-tête Content-Encoding.
  3. Dans l'exemple ci-dessus, la charge utile de la requête comporte une extension gz, qui indique que le contenu doit être gzip. Vous pouvez résoudre le problème en envoyant l'en-tête de requête en tant que Content-Encoding: gzip et la charge utile de la requête au format gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

Cause: encodage non accepté dans la réponse

Diagnostic

  1. Déterminez le code d'erreur et la source de l'erreur de l'erreur observée à l'aide de la surveillance d'API, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes.
  2. Si la valeur de Fault Source est target, cela signifie que la réponse envoyée par le serveur backend contient un encodage non compatible dans l'en-tête Content-Encoding.
  3. Vous pouvez déterminer la valeur de l'encodage non accepté transmis dans la réponse HTTP du serveur backend à l'aide de l'une des méthodes suivantes:

    Message d'erreur

    Utilisation du message d'erreur:
    1. Si vous avez accès au message d'erreur complet reçu d'Apigee Edge, reportez-vous au faultstring. faultstring contient la valeur de l'encodage non compatible.

      Exemple de message d'erreur:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Dans le message d'erreur ci-dessus, notez que la valeur de l'encodage non compatible est “UTF-8”, comme indiqué dans faultstring.

      Étant donné que “UTF-8” n'est pas un encodage compatible dans Apigee Edge, cette requête échoue avec une erreur 415 Unsupported Media Type avec le code d'erreur : protocol.http.UnsupportedEncoding.

    Outil de traçage

    Utiliser Trace:
    1. Si vous ne disposez pas de la trace de la requête ayant échoué, accédez à Résolution.
    2. Si vous avez capturé une trace de l'échec, vous pouvez déterminer l'encodage non compatible transmis par le serveur backend dans l'en-tête de réponse Content-Encoding, comme expliqué dans l'outil de traçage.

Résolution

  1. Reportez-vous à la liste des encodages acceptés par Apigee dans Encodage compatible.
  2. Assurez-vous que le serveur backend envoie toujours les éléments suivants :
    • Seul l'encodage compatible comme valeur de l'en-tête Content-Encoding de la requête
    • La charge utile de réponse au format compatible avec Apigee Edge et correspond au format spécifié dans l'en-tête Content-Encoding

Encodage compatible

Le tableau suivant répertorie le format d'encodage accepté par Apigee Edge:

En-tête Encodage Description
Content-Encoding gzip Le format Unix gzip
deflate Ce format utilise une structure zlib avec un algorithme de compression "Deflate".

Spécification

Apigee renvoie la réponse d'erreur 415 Unsupported Media Type conformément à la spécification RFC suivante:

Spécification
RFC 7231, section 6.5.13: 415 Unsupported Media Type

Points clés à noter

Veuillez noter les points suivants :

  • Si Apigee renvoie l'erreur 415 en raison d'un encodage non accepté transmis dans l'en-tête Content-Encoding lors de la requête API :
    • Vous ne pourrez pas capturer la trace de ces requêtes.
    • Vous ne pourrez pas modifier le format ni le contenu de la réponse d'erreur envoyée par Apigee Edge à l'aide de stratégies telles que AugmentFault et AffectMessage.

    En effet, cette erreur se produit à une phase précoce du processeur de messages avant qu'une stratégie puisse être exécutée.

  • Si l'erreur 415 est renvoyée par Apigee en raison d'un encodage non accepté transmis dans l'en-tête de réponse à partir de votre serveur backend, elle doit être corrigée sur le serveur backend pour éviter cette erreur. Si nécessaire, veuillez vous adresser à votre équipe backend pour résoudre ce problème.

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

Vous devez collecter des informations de diagnostic

Si vous avez toujours besoin d'aide de l'assistance Apigee, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee Edge:

Si vous êtes un utilisateur de cloud public, fournissez les informations suivantes:

  • Le nom de l'organisation.
  • Nom de l'environnement
  • Nom du proxy d'API
  • Complétez la commande curl permettant de reproduire l'erreur 415.
  • Fichier de suivi des requêtes API

Si vous êtes un utilisateur du Private Cloud, fournissez les informations suivantes:

  • Message d'erreur complet observé pour les requêtes ayant échoué
  • Nom de l'environnement
  • Groupe de proxys d'API
  • Fichier de suivi des requêtes API
  • Journaux d'accès NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    :ORG, ENV et PORT# sont remplacés par des valeurs réelles.

  • Journaux système du processeur de messages /opt/apigee/var/log/edge-message- processor/logs/system.log