<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 obtient le code d'état HTTP 502 Bad Gateway
avec un code d'erreur
messaging.adaptors.http.flow.DecompressionFailureAtResponse
en réponse à l'API
appels.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 502 Bad Gateway
En outre, un message d'erreur semblable à celui présenté ci-dessous peut s'afficher:
{ "fault":{ "faultstring":"Decompression failure at response", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse" } } }
Causes possibles
Cette erreur ne se produit que dans les cas suivants :
- L'encodage spécifié dans l'en-tête de réponse HTTP (à partir de l'en-tête backend/serveur cible)
Content-Encoding
est valide et <ph type="x-smartling-placeholder"></ph> compatible avec Apigee Edge, - Format de la charge utile envoyée par le backend/serveur cible dans la réponse HTTP
n'a pas
correspond au format d'encodage spécifié dans l'en-tête
Content-Encoding
MAIS
Ceci est dû au fait qu'Apigee Edge ne parvient pas à décoder la charge utile à l'aide de l'encodage spécifié puisque le
format de la charge utile n'est pas dans le même format que l'encodage spécifié dans
En-tête Content-Encoding
.
Voici quelques exemples de valeurs Content-Encoding
acceptées et comment Apigee Edge
s'attend à ce que la représentation de la charge utile soit dans ces cas:
Scénario | Content-Encoding | Représentation de la charge utile |
---|---|---|
Encodage unique | gzip | Format Unix Voir <ph type="x-smartling-placeholder"></ph> Format RFC1952 GZIP |
Encodage unique | faire baisser | Ce format utilise la structure Voir <ph type="x-smartling-placeholder"></ph>
RFC1950 et
<ph type="x-smartling-placeholder"></ph>
RFC1951 |
Encodages multiples | Encodages multiples Par exemple, lorsque l'encodage est effectué deux fois, voici ce qui peut se produire:
|
Plusieurs encodages sont appliqués à la charge utile dans l'ordre donné, tel qu'il apparaît dans l'en-tête. |
Les causes possibles de cette erreur sont les suivantes:
Cause | Description | Instructions de dépannage applicables |
---|---|---|
<ph type="x-smartling-placeholder"></ph> Le format de la charge utile de réponse ne correspond pas à Content-Encoding | Le format de la charge utile de réponse envoyée par le serveur backend/cible est soit
n'est pas codée ou n'est pas
correspond à l'encodage spécifié dans l'en-tête Content-Encoding . |
Utilisateurs Edge de cloud public et privé |
Étapes de diagnostic courantes
Utilisez l'une des techniques ou l'un des outils suivants pour diagnostiquer ce problème:
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 à l'interface utilisateur d'Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Accédez à 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
messaging.adaptors.http.flow.DecompressionFailureAtResponse
comme comme indiqué ci-dessous:Informations sur le code d'erreur
messaging.adaptors.http.flow.DecompressionFailureAtResponse
s'affiche comme suit:Cliquez sur Afficher les journaux et développez la ligne qui échoue avec l'erreur
502
.- Dans la fenêtre Journaux, notez les détails suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Code d'état:
502
- Source de l'erreur:
target
- Code d'erreur:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
- Code d'état:
- Si la source de la défaillance a la valeur
target
, cela indique que le format de la charge utile de la réponse ne correspondait pas au <ph type="x-smartling-placeholder"></ph> encodage pris en charge spécifié dans l'en-tête de réponse du serveur backendContent-Encoding
Outil Trace
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez la session de trace.
et l'une des options suivantes:
<ph type="x-smartling-placeholder">
- </ph>
- Attendez que l'erreur
502 Bad Gateway
se produise. - Si vous pouvez reproduire le problème, effectuez l'appel d'API et reproduisez les actions
502 Bad Gateway
- 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 réponses ayant échoué et examinez la trace.
- Parcourir les différentes phases de la trace et localiser l'origine de la défaillance s'est produit.
Vous trouverez généralement l'erreur dans un flux juste après le Response Received from target server (Réponse reçue du serveur cible) comme indiqué ci-dessous:
-
Notez les valeurs des propriétés de la trace:
- Content-Encoding (Encodage du contenu) :
gzip
- Response Content Body (Corps du contenu de la réponse) :
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Content-Encoding (Encodage du contenu) :
Passez à la phase d'erreur juste après la réponse reçue du serveur cible. phase:
Notez les propriétés:
- erreur:
Decompression failure at response
- error.class::
com.apigee.errors.http.server.BadGateway
error.cause::
Not in GZIP format
error.cause indique que la charge utile de la réponse n'est pas au format GZIP. Cela signifie qu'Apigee Edge s'attendait à ce que la charge utile de la réponse soit au format GZIP sous la forme a été spécifiée dans l'en-tête
Content-Encoding
(déterminé à l'étape Par conséquent, Apigee Edge ne peut pas décompresser la charge utile à l'aide de gzip et renvoie le erreurDecompression failure at response
.
Notez que la réponse du serveur cible/backend est
200
dans ce case; Cependant, l'application cliente reçoit une réponse502
car l'erreur est renvoyée par Apigee Edge.- erreur:
Accédez à la phase Response Sent to Client (Réponse envoyée au client) dans la trace et cliquez dessus.
Notez les détails suivants issus de la trace:
- Code d'état:
502 Bad Gateway
. - Contenu de l'erreur:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Code d'état:
Accédez à la phase AX (Données analytiques enregistrées) dans la trace. et cliquez dessus.
- Faites défiler la page jusqu'à la section Phase Details (Détails de la phase), Error Headers (En-têtes d'erreur) 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.
en tant que
messaging.adaptors.http.flow.DecompressionFailureAtResponse
ettarget
, qui indique que le format de la charge utile de la réponse ne correspond pas au l'encodage spécifié dans l'en-têteContent-Encoding
.En-têtes de réponse Valeur X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
NGINX
<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 concernant les erreurs HTTP
502
. Vérifiez les 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.
- Effectuez une recherche pour voir s'il existe des erreurs
502
pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des réponses échouent encore502
Si vous trouvez des erreurs
502
avec le code X-Apigee-fault-code correspondant à la valeur demessaging.adaptors.http.flow.DecompressionFailureAtResponse
, puis déterminer la valeur de X-Apigee-fault-source..Exemple d'erreur 502 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-code
En-têtes de réponse Valeur X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
Cause: Le format de la charge utile de la réponse ne correspond pas à l'encodage de contenu
Par défaut, Apigee Edge décompresse toujours la charge utile si l'en-tête de réponse
Content-Encoding
contient une valeur valide et un
<ph type="x-smartling-placeholder"></ph>
encodage compatible. Par conséquent, il est attendu que le format de la charge utile de la réponse
doit correspondre à l'encodage spécifié dans l'en-tête de réponse Content-Encoding
.
En cas de non-concordance, vous obtenez cette erreur.
Diagnostic
- Déterminez le code d'erreur et la source d'erreur pour l'erreur observée à l'aide de l'API. Monitoring, l'outil Trace ou les journaux d'accès NGINX comme expliqué dans Étapes de diagnostic courantes.
- Si le code d'erreur est
messaging.adaptors.http.flow.DecompressionFailureAtResponse
et les Source de la défaillance a la valeurtarget
, alors cette indique que le format de la charge utile de réponse envoyée par le serveur backend/cible ne correspond pas au <ph type="x-smartling-placeholder"></ph> compatible avec l'encodage spécifié dans l'en-tête de réponseContent-Encoding
. Vous pouvez déterminer la non-concordance dans la réponse HTTP à l'aide de l'une des méthodes suivantes : méthodes:
Message d'erreur
Pour valider à l'aide du message d'erreur:
-
Si vous avez accès au message d'erreur complet reçu d'Apigee Edge, reportez-vous à
faultstring
.Exemple de message d'erreur:
"faultstring":"Decompression failure at response"
- Dans le message d'erreur ci-dessus, il affiche
"Decompression failure at response"
, ce qui implique que la réponse n'ont pas pu être décompressées à l'aide de l'encodage spécifié dans leContent-Encoding
.
Trace
Pour valider à l'aide de Trace:
- Déterminez Content-Type et error.cause. à l'aide de Trace comme expliqué dans la section Étapes de diagnostic courantes.
Les valeurs de l'exemple de trace sont les suivantes:
- Content-Encoding (Encodage du contenu) :
gzip
- error.cause::
Not in GZIP format
La valeur dans l'en-tête de réponse Content-Encoding est gzip. Toutefois, la charge utile de la réponse n'est pas au format GZIP. (comme indiqué par error.cause). Par conséquent, Apigee Edge répond avec
502 Bad Gateway
et code d'erreurmessaging.adaptors.http.flow.DecompressionFailureAtResponse
- Content-Encoding (Encodage du contenu) :
Demande réelle
Pour effectuer la validation à l'aide de la requête réelle:
Si vous avez accès à la requête réelle adressée au serveur cible/backend , puis effectuez les étapes suivantes:
- Si vous êtes un utilisateur de cloud public/cloud privé, envoyez une requête directement au serveur backend à partir du serveur backend lui-même ou de toute autre à partir de laquelle vous êtes autorisé à adresser une requête au serveur backend.
- Si vous êtes un utilisateur du Private Cloud, vous pouvez également effectuer la requête au serveur backend depuis l'un des processeurs de messages.
- Examiner la réponse envoyée par le serveur backend et déterminer la valeur
transmis dans l'en-tête de réponse
Content-Encoding.
- Déterminez le format de la charge utile envoyée dans la requête.
- Si la valeur de l'en-tête
Content-Encoding
figure dans la liste des <ph type="x-smartling-placeholder"></ph> un encodage pris en charge, mais le format de la charge utile de la réponse ne correspond pas à l'encodage spécifié dans l'en-têteContent-Encoding
; c'est la cause du problème.Exemple:
curl -v https://HOSTALIAS/test
***trimmed*** > < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.zip Response Body(not in GZIP format)>L'exemple de réponse ci-dessus envoie la valeur
gzip
auContent-Encoding
, qui est une <ph type="x-smartling-placeholder"></ph> compatible avec l'encodage d'Apigee Edge. Toutefois,response_payload.zip
est envoyé sous forme de fichier ZIP. Par conséquent, cette échoue et affiche l'erreur502 Bad Gateway
avec le code d'erreur suivant:messaging.adaptors.http.flow.DecompressionFailureAtResponse
Journaux de processeur de messages
<ph type="x-smartling-placeholder">Pour valider l'utilisation des journaux du processeur de messages:
Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux du processeur de messages pour déterminer les informations clés sur les erreurs HTTP
502
.Consultez le journal du processeur de messages:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Effectuez une recherche pour voir s'il y a des erreurs
502
au cours d'une durée (si le problème s'est produit dans le passé) ou s'il existe des réponses échouent toujours avec502
. Vous pouvez utiliser la chaîne de recherche suivante:grep -ri "ZipException"
Vous trouverez des lignes de system.log semblables à ce qui suit:
Scénario 1
Scénario 1: Lorsque la réponse de l'API comporte l'en-tête Content-Encoding: gzip
2021-08-02 06:50:25,433 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0 bytesWritten=203 age=469ms lastIO=0ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: Not in GZIP format
---trimmed-- 2021-08-02 06:50:25,433 NIOThread@2 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:50:25,434 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format) 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exceptionjava.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP formatLa ligne
java.util.zip.ZipException: Not in GZIP format
dans le message d'erreur ci-dessus indique que la réponse la charge utile n'est pas envoyée au format GZIP bien queContent-Encoding
est spécifiée en tant que gzip. Par conséquent, Apigee Edge génère l'exception renvoie un code d'état502
avec un code d'erreurmessaging.adaptors.http.flow.DecompressionFailureAtResponse
aux applications clientes.Scénario 2
Scénario 2: Lorsque la réponse de l'API comporte l'en-tête "Content-Encoding: deflate"
2021-08-02 06:35:21,215 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0 bytesWritten=202 age=439ms lastIO=2ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
---trimmed---- Caused by:java.util.zip.DataFormatException: incorrect header check
---trimmed--- 2021-08-02 06:35:21,215 NIOThread@0 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:35:21,216 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277, incorrect header check) 2021-08-02 06:35:21,216 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.util.zip.ZipException: incorrect header check occurred while writing to channel null 2021-08-02 06:35:21,217 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: incorrect header checkLes lignes
java.util.zip.ZipException: incorrect header check
etCaused by: java.util.zip.DataFormatException: incorrect header check
dans le message d'erreur ci-dessus indiquent que la charge utile de la réponse n'est pas envoyée de gonfler et ne correspond pas au codage spécifié dans En-têteContent-Encoding
de la décompression. Par conséquent, Apigee Edge génère l'exception et renvoie un code d'état502
avec code d'erreurmessaging.adaptors.http.flow.DecompressionFailureAtResponse
aux applications clientes.
-
Solution
- S'il n'est pas nécessaire de la charge utile de réponse compressée dans le flux de proxy d'API dans Apigee Edge
et au serveur backend, ne transmettez pas l'en-tête
Content-Encoding
. Si vous avez besoin de compresser la charge utile de la réponse, passez à l'étape 2. - S'il est nécessaire de compresser la charge utile de la réponse, assurez-vous que le serveur backend
envoie toujours les éléments suivants:
<ph type="x-smartling-placeholder">
- </ph>
- N'importe quelle
<ph type="x-smartling-placeholder"></ph>
compatible avec le codage comme valeur de l'en-tête
Content-Encoding
dans réponse - La charge utile de la réponse au format pris en charge vers Apigee Edge correspond à l'encodage
format spécifié dans l'en-tête
Content-Encoding
- N'importe quelle
<ph type="x-smartling-placeholder"></ph>
compatible avec le codage comme valeur de l'en-tête
- Dans l'exemple discuté ci-dessus, la charge utile de la réponse est au format ZIP, mais l'en-tête de réponse
spécifie
Content-Encoding: gzip
. Vous pouvez résoudre le problème en envoyant la réponse l'en-tête en tant queContent-Encoding: gzip
et la charge utile de la réponse dansgzip
format:curl -v https://HOSTALIAS/v1/test
> < HTTP/1.1 200 OK < Accept-Ranges: bytes <
<ph type="x-smartling-placeholder">Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.gz Response Body(in GZIP format)>
Spécification
Apigee Edge répond avec le code d'état 502 Bad Gateway
avec un code d'erreur
messaging.adaptors.http.flow.DecompressionFailureAtResponse
, conformément au document RFC suivant
spécifications:
Spécification |
---|
<ph type="x-smartling-placeholder"></ph> RFC 7231, section 6.5.1 |
<ph type="x-smartling-placeholder"></ph> RFC 7231, section 3.1.2.2 |
Si vous avez encore besoin de l'aide de l'assistance Apigee, consultez doit recueillir des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Rassemblez les informations de diagnostic suivantes, 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'erreur502
. - Fichier de suivi des réponses de l'API
Si vous êtes un utilisateur du Private Cloud, fournissez les informations suivantes:
- Message d'erreur complet observé pour les réponses en échec
- Nom de l'environnement
- Groupe de proxys d'API
- Fichier de suivi des réponses de l'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