<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Symptôme
L'application cliente reçoit un code d'état HTTP 415 Unsupported Media Type
avec
code d'erreur protocol.http.UnsupportedEncoding
en réponse aux appels d'API.
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 la réponse HTTP envoyée par le serveur backend à
Apigee ne contient pas
codage pris en charge par Apigee, conformément à la spécification
<ph type="x-smartling-placeholder"></ph>
RFC 7231, section 6.5.13: 415 Unsupported Media Type.
Les causes possibles de cette erreur sont les suivantes:
Cause | Description | Instructions de dépannage applicables |
---|---|---|
Encodage non accepté utilisé dans la requête | L'en-tête de requête Content-Encoding contient un encodage non compatible.
par Apigee Edge. |
Utilisateurs Edge de cloud public et privé |
Encodage non accepté 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 de cloud public et privé |
Étapes de diagnostic courantes
Pour diagnostiquer l'erreur, vous pouvez utiliser l'une des méthodes suivantes:
Surveillance des API
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'API Monitoring, procédez comme suit:
- <ph type="x-smartling-placeholder"></ph> Connectez-vous à votre compte Apigee Edge.
Passez à l'organisation dans laquelle vous souhaitez examiner le problème:
- Accédez à Analyser > Surveillance des API > Examiner.
- 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.
- Représentez 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
s'affichent comme suit:Cliquez sur Afficher les journaux et développez l'une des requêtes qui échouent avec
415
. pour afficher plus d'informations:- Dans la fenêtre Journaux, notez les détails suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Fault Source (Source de l'erreur) : indique que l'erreur est renvoyée par
apigee
. outarget
. - Code d'erreur:il doit correspondre à
protocol.http.UnsupportedEncoding
.
- Fault Source (Source de l'erreur) : indique que l'erreur est renvoyée par
- Si la source de la défaillance est
apigee
, cela indique que la requête contient un encodage non compatible dans l'en-têteContent-Encoding
. - Si la source d'erreur est
target
, cela indique que le serveur backend L'en-têteContent-Encoding
de la réponse contenait un encodage non compatible.
Outil Trace
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez le
session Trace, puis effectuez l'une des opérations suivantes:
<ph type="x-smartling-placeholder">
- </ph>
- Attendez que l'erreur
415 Unsupported Media Type
se produise. - Si vous pouvez reproduire le problème, effectuez l'appel d'API pour reproduire
415 Unsupported Media Type
erreur.
- Attendez que l'erreur
Assurez-vous que l'option Show all FlowInfos (Afficher toutes les informations 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 s'affiche généralement dans un flux après la demande Request sent to target serveur comme indiqué ci-dessous:
Notez la valeur de l'erreur à partir de la trace.
L'exemple de trace ci-dessus indique l'erreur sous la forme
Unsupported Encoding "utf-8"
. Depuis l'erreur est signalée par Apigee après l'envoi de la requête au serveur backend, cela indique que le serveur backend a envoyé l'en-tête de réponseContent-Encoding
avec la valeur de"utf-8"
, qui n'est pas encodage compatible avec Apigee.- Accédez à la phase AX (Données analytiques enregistrées) dans la trace, puis cliquez dessus.
Faites défiler la page jusqu'à la section Error / Response Headers (En-têtes d'erreur/de réponse) dans Phase Details (Détails de la phase). panneau et déterminer les valeurs de X-Apigee-fault-code et X-Apigee-fault-source, comme indiqué ci-dessous:
Vous verrez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source par
protocol.http.UnsupportedEncoding
ettarget
, ce qui indique que est générée, car la valeur d'encodage non prise en charge de"utf-8"
a été transmise par le 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
<ph type="x-smartling-placeholder"></ph>
le chaînage de proxy ; c'est-à-dire si le serveur/point de terminaison cible appelle une autre
dans Apigee.
Pour le déterminer, revenez à la phase Demande envoyée au serveur cible. Cliquez sur Show Curl (Afficher le mouvement curl).
- La fenêtre Curl for Request Sent to Target Server (Curl pour la requête envoyée au serveur cible) qui s'ouvre vous permet de déterminer l'alias d'hôte du serveur cible.
- Si l'alias hôte du serveur cible pointe vers un alias d'hôte virtuel, il s'agit d'un proxy
et le chaînage. Dans ce cas, vous devez répéter toutes les étapes ci-dessus pour le proxy enchaîné jusqu'à
vous déterminez ce qui est à l'origine de l'erreur
415 Unsupported Media Type
. - Si l'alias d'hôte du serveur cible pointe vers votre serveur backend, cela indique que votre serveur backend transmet l'encodage non pris en charge à Apigee.
Journaux d'accès Nginix
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX:
- Si vous êtes un utilisateur du Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour déterminer
les informations clés sur les erreurs HTTP
415
. Vérifiez les journaux d'accès NGINX:
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Recherchez les erreurs
415
pendant une période spécifique (si le problème s'est produit). ou si des requêtes échouent toujours avec415
. Si vous trouvez des erreurs
415
avec la correspondance X-Apigee-fault-code la valeur deprotocol.http.UnsupportedEncoding
, puis déterminez la valeur de X-Apigee-fault-source.Exemple d'erreur 415 dans le journal d'accès NGINX:
L'exemple d'entrée ci-dessus du journal d'accès NGINX présente 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 d'erreur pour l'erreur observée à l'aide de l'API. Journaux d'accès Monitoring ou NGINX comme expliqué dans la section Étapes de diagnostic courantes.
- Si le code d'erreur est
protocol.http.UnsupportedEncoding
et que la valeur Fault Source a la valeurapigee
ouMP
, cela indique que le L'en-tête de la requête envoyée par l'application cliente contient un encodage non compatibleContent-Encoding
- Vous pouvez déterminer la valeur de l'encodage non compatible transmis dans la requête HTTP.
à l'aide de l'une des méthodes suivantes:
Message d'erreur
Utilisation du message d'erreur: <ph type="x-smartling-placeholder">- </ph>
Si vous avez accès au message d'erreur complet reçu d'Apigee Edge, consultez à
faultstring
.faultstring
contient la valeur de l'élément incompatible le codage final.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 pris en charge est
“UTF-8”
comme indiqué dansfaultstring
.Étant donné que
“UTF-8”
n'est pas un encodage pris en charge dans Apigee Edge, cette requête échoue avec l'erreur415 Unsupported Media Type
avec le code d'erreur suivant:protocol.http.UnsupportedEncoding
Demande réelle
Avec la requête réelle: <ph type="x-smartling-placeholder">- </ph>
- Si vous n'avez pas accès à la requête réelle envoyée par l'application cliente, accédez à Résolution.
- Si vous avez accès à la requête proprement dite effectuée par l'application cliente, exécutez la
procédez comme suit:
<ph type="x-smartling-placeholder">
- </ph>
- Déterminez 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 1 parmi les valeurs listées dans la section Encodage compatible, il s'agit 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 pris en charge dans Apigee Edge. Par conséquent, cette requête échoue avec l'erreur415 Unsupported Media Type
avec le code d'erreur suivant:protocol.http.UnsupportedEncoding
- Déterminez la valeur transmise à l'en-tête de requête
Solution
- Consultez la liste des encodages compatibles avec Apigee dans Encodage compatible.
- Assurez-vous que l'application cliente envoie toujours les éléments suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Seul l'encodage compatible correspond à la valeur de l'en-tête
Content-Encoding
dans la demande - 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 correspond à la 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 la 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 d'erreur pour l'erreur observée à l'aide de l'API. les journaux d'accès Monitoring, Trace ou NGINX comme expliqué dans l'article Étapes de diagnostic courantes.
- Si la source de la défaillance a la valeur
target
, cela indique que le envoyée par le serveur backend contient un encodage non pris en charge dans leContent-Encoding
. - Vous pouvez déterminer la valeur de l'encodage non pris en charge transmis dans la réponse HTTP à partir de
serveur backend à l'aide de l'une des méthodes suivantes:
Message d'erreur
Utilisation du message d'erreur: <ph type="x-smartling-placeholder">- </ph>
Si vous avez accès au message d'erreur complet reçu d'Apigee Edge, reportez-vous à
faultstring
.faultstring
contient la valeur de encodage non pris en charge.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 pris en charge est
“UTF-8”
comme indiqué dansfaultstring
.Comme
“UTF-8”
n'est pas un encodage pris en charge dans Apigee Edge, cette La requête échoue avec l'erreur415 Unsupported Media Type
avec le code d'erreur suivant:protocol.http.UnsupportedEncoding
Outil Trace
Utiliser Trace: <ph type="x-smartling-placeholder">- </ph>
- Si vous ne disposez pas de la trace de la requête ayant échoué, accédez à Résolution.
- Si vous avez capturé une trace pour l'échec, vous pouvez déterminer la couche non prise en charge
encodage transmis par le serveur backend dans la réponse
Content-Encoding
comme expliqué dans l'outil Trace.
Solution
- Consultez la liste des encodages compatibles avec Apigee dans Encodage compatible
- Assurez-vous que le serveur backend envoie toujours les éléments suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Seul l'encodage compatible est la valeur du paramètre
En-tête
Content-Encoding
dans la requête - La charge utile de la réponse dans le format pris en charge vers Apigee Edge et correspond au format
spécifié dans l'en-tête
Content-Encoding
- Seul l'encodage compatible est la valeur du paramètre
En-tête
Encodage compatible
Le tableau suivant répertorie les formats d'encodage compatibles avec Apigee Edge:
En-tête | Encodage | Description |
---|---|---|
Content-Encoding |
gzip |
Format Unix gzip |
deflate |
Ce format utilise la structure zlib avec un algorithme de compression de décompression. |
Spécification
Apigee répond avec la réponse d'erreur 415 Unsupported Media Type
conformément aux
spécification RFC suivante:
Spécification |
---|
<ph type="x-smartling-placeholder"></ph> RFC 7231, section 6.5.13: 415 Unsupported Media Type |
Points clés à noter
Veuillez noter les points suivants :
- Si l'erreur
415
est renvoyée par Apigee en raison d'un encodage non compatible transmis l'en-têteContent-Encoding
dans la requête API, puis: <ph type="x-smartling-placeholder">- </ph>
- Vous ne pourrez pas capturer la trace pour 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 règles telles que RaiseFault et assignMessage.
En effet, cette erreur se produit à un stade précoce du processeur de messages, avant toute peut être exécutée.
- Si l'erreur
415
est renvoyée par Apigee en raison d'un encodage non compatible transmis dans l'en-tête de réponse de votre serveur backend, le problème doit être corrigé dans le serveur backend pour éviter cette erreur. Veuillez contacter votre équipe backend si nécessaire pour résoudre ce problème.
Si vous avez toujours besoin de l'aide de l'assistance Apigee Edge, consultez Obligation de recueillir des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Si vous avez toujours besoin de l'aide de l'assistance Apigee, rassemblez les éléments suivants de diagnostic, puis contactez l'assistance Apigee Edge:
Si vous êtes un utilisateur de cloud public, fournissez les informations suivantes:
- Nom de l'organisation
- Nom de l'environnement
- Nom du proxy d'API
- Exécutez la commande
curl
utilisée pour 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 en échec
- 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 les valeurs réelles.
- Journaux système du processeur de messages
/opt/apigee/var/log/edge-message- processor/logs/system.log