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:
- Connectez-vous à votre compte Apigee Edge.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème:
- Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Enquêter).
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
- Assurez-vous que le filtre Proxy est défini sur Tous.
- Tracez le code d'erreur par rapport à l'heure.
Sélectionnez une cellule avec le code d'erreur
protocol.http.UnsupportedEncoding
, comme indiqué ci-dessous:Les informations sur le code d'erreur
protocol.http.UnsupportedEncoding
sont affichées comme indiqué ci-dessous:Cliquez sur Afficher les journaux , puis développez l'une des requêtes ayant échoué avec l'erreur
415
pour afficher plus d'informations:- Dans la fenêtre Journaux, notez les détails suivants :
- Fault Source (Source d'erreur) : indique que l'erreur est renvoyée par
apigee
outarget
. - Code d'erreur:il doit correspondre à
protocol.http.UnsupportedEncoding
.
- Fault Source (Source d'erreur) : indique que l'erreur est renvoyée par
- Si la valeur de Fault Source est
apigee
, cela signifie que la requête contient un encodage non compatible dans l'en-têteContent-Encoding
. - 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êteContent-Encoding
.
Outil de traçage
Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- 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
.
- Attendez que l'erreur
Assurez-vous que l'option Show all FlowInfos (Afficher tous les FlowInfos) est activée:
- Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
- Parcourez les différentes phases de la trace et localisez l'origine de l'échec.
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:
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éponseContent-Encoding
avec la valeur"utf-8"
, qui n'est pas un encodage compatible dans Apigee.- Accédez à la phase AX (Données analytiques enregistrées) dans la trace et cliquez dessus.
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:
Vous verrez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source comme
protocol.http.UnsupportedEncoding
ettarget
, 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éponseContent-Encoding
.En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.UnsupportedEncoding
X-Apigee-fault-source target
- 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.
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).
- 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.
- 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
. - 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:
- 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
. Vérifiez les journaux d'accès NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 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 avec415
. Si vous trouvez des erreurs
415
avec le X-Apigee-fault-code correspondant à la valeur deprotocol.http.UnsupportedEncoding
, déterminez la valeur de X-Apigee-fault-codeExemple 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
- 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.
- Si le code d'erreur est
protocol.http.UnsupportedEncoding
et que la source d'erreur a la valeurapigee
ouMP
, cela signifie que la requête envoyée par l'application cliente contient un encodage non compatible dans l'en-tête de requêteContent-Encoding
. - 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: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\""
Dans le message d'erreur ci-dessus, notez que la valeur de l'encodage non compatible est
“UTF-8”
, comme indiqué dansfaultstring
.Étant donné que
“UTF-8”
n'est pas un encodage compatible dans Apigee Edge, cette requête échoue et renvoie l'erreur415 Unsupported Media Type
avec le code d'erreur suivant :protocol.http.UnsupportedEncoding
.
Demande réelle
Avec la requête réelle:- Si vous n'avez pas accès à la requête réelle envoyée par l'application cliente, passez à la section Résolution.
- Si vous avez accès à la requête réelle envoyée par l'application cliente, procédez comme suit :
- Déterminer la valeur transmise à l'en-tête de requête
Content-Encoding.
- 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êteContent- Encoding
, qui n'est pas un encodage compatible dans Apigee Edge. Par conséquent, cette requête échoue avec une erreur415 Unsupported Media Type
avec le code d'erreur suivant :protocol.http.UnsupportedEncoding
.
- Déterminer la valeur transmise à l'en-tête de requête
Résolution
- Reportez-vous à la liste des encodages acceptés par Apigee dans Encodage compatible.
- 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
.
- Seul l'encodage compatible comme valeur de l'en-tête
Dans l'exemple ci-dessus, la charge utile de la requête comporte une extension
gz
, qui indique que le contenu doit êtregzip
. Vous pouvez résoudre le problème en envoyant l'en-tête de requête en tant queContent-Encoding: gzip
et la charge utile de la requête au formatgzip
: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
- 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.
- 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êteContent-Encoding
. - 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: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\""
-
Dans le message d'erreur ci-dessus, notez que la valeur de l'encodage non compatible est
“UTF-8”
, comme indiqué dansfaultstring
.Étant donné que
“UTF-8”
n'est pas un encodage compatible dans Apigee Edge, cette requête échoue avec une erreur415 Unsupported Media Type
avec le code d'erreur :protocol.http.UnsupportedEncoding
.
Outil de traçage
Utiliser Trace:- Si vous ne disposez pas de la trace de la requête ayant échoué, accédez à Résolution.
- 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
- Reportez-vous à la liste des encodages acceptés par Apigee dans Encodage compatible.
- 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
- Seul l'encodage compatible comme valeur de l'en-tête
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êteContent-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'erreur415
. - 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
Où: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