<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 502 Bad Gateway
avec
Code d'erreur protocol.http.TooBigHeaders
comme réponse pour l'API
appels.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 502 Bad Gateway
Le message d'erreur suivant peut également s'afficher:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Causes possibles
Cette erreur se produit si la taille totale des en-têtes envoyés par la cible/le backend serveur vers Apigee Edge dans le cadre de la réponse HTTP est supérieure à la limite autorisée limite autorisée dans Apigee Edge.
Voici les causes possibles de cette erreur:
Cause | Description | Instructions de dépannage applicables |
---|---|---|
La taille des en-têtes dans la réponse est supérieure à la limite autorisée | La taille d'un en-tête particulier ou la somme des tailles d'en-tête de toutes les en-têtes envoyés par la cible/le serveur backend dans le cadre d'une réponse HTTP à Apigee Edge dépasse la limite autorisée dans Apigee Edge. | 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.
- Vous pouvez sélectionner le filtre Proxy pour affiner le code d'erreur.
- Représentez le code d'erreur par rapport à l'heure.
Sélectionnez une cellule avec le code d'erreur
protocol.http.TooBigHeaders
comme comme indiqué ci-dessous:Vous verrez les informations sur le code d'erreur
protocol.http.TooBigHeaders
comme indiqué ci-dessous:Cliquez sur Afficher les journaux et développez la ligne correspondant à la requête ayant échoué.
- 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:
protocol.http.TooBigHeaders
.
- Code d'état:
- Si la Source de la défaillance a la valeur
target
et la Fault "Code", qui a la valeurprotocol.http.TooBigHeaders
, cela indique que la réponse HTTP du serveur cible/ backend comporte des en-têtes dont la taille est supérieure supérieure à la limite autorisée dans Apigee Edge.
Outil Trace
<ph type="x-smartling-placeholder">- 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 l'erreur
502 Bad Gateway
.
- Attendez que l'erreur
- Sélectionnez l'une des requêtes 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.
En règle générale, vous verrez cette erreur dans le flux nommé Error juste après le Demande envoyée à la phase du serveur cible, comme indiqué ci-dessous:
Notez les valeurs de l'erreur à partir de la trace:
- erreur:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Cela indique qu'Apigee Edge (Composant de processeur de messages) génère l'erreur en tant que dès qu'il reçoit la réponse du serveur backend en raison de la taille d'en-tête au-delà de la limite autorisée.
- erreur:
L'échec apparaîtra dans le message Response Sent to Client (Réponse envoyée au client). réponse d'erreur envoyée par Apigee Edge comme indiqué ci-dessous:
- Notez les valeurs de l'erreur à partir de la trace. L'exemple de trace ci-dessus montre:
<ph type="x-smartling-placeholder">
- </ph>
- Erreur:
502 Bad Gateway
. - Contenu de l'erreur:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Erreur:
Accédez à la phase AX (Données analytiques enregistrées) dans la trace. et cliquez dessus pour afficher les détails associés.
Notez la valeur des éléments suivants:
En-têtes d'erreur Valeur X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Contenu de l'erreur: corps {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
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 HTTP
502 Bad Gateway
. 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
avec le code d'erreurprotocol.http.TooBigHeaders
pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent encore avec502
Si vous trouvez des erreurs
502
avec le code X-Apigee-fault-code correspondant à la valeur deprotocol.http.TooBigHeaders
, puis déterminez 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 d'erreur Valeur X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Cause: la taille des en-têtes dans la réponse est supérieure à la limite autorisée
Diagnostic
- Déterminez le code d'erreur, la source d'erreur et la taille de la charge utile de la réponse pour le erreur observée à l'aide de la surveillance des API, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans Étapes de diagnostic courantes.
- Si la source de la défaillance a la valeur
target
, cela indique que la réponse envoyée par le serveur cible/backend à Apigee comporte des en-têtes dont la taille est supérieure supérieure à la limite autorisée dans Apigee Edge. - Vous pouvez vérifier que la réponse de la cible/du backend comporte des en-têtes dont la taille était
soit supérieure à la limite autorisée, à l'aide de l'une des méthodes suivantes:
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
. Lefaultstring
indique que la taille de l'en-tête de réponse a dépassé la limite autorisée.Exemple de message d'erreur:
"faultstring":"response headers size exceeding 25,600"
Dans le message d'erreur ci-dessus, notez dans
faultstring
que la contient des en-têtes dont la taille totale dépasse la limite autorisée.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é à envoyer une requête au backend Google Cloud.
- Si vous êtes un utilisateur du cloud privé, vous pouvez également envoyer une requête à le serveur backend à partir de l'un des processeurs de messages.
- Examinez la réponse reçue du serveur backend et, en particulier calculer et vérifier la taille totale des en-têtes transmis dans la réponse.
Si vous constatez que la taille des en-têtes dans la charge utile de la réponse dépasse la limite autorisée dans Apigee Edge, c'est la cause du problème.
Exemple de réponse du serveur cible:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactDans l'exemple ci-dessus,
Testheader1
et La taille desTestheader2
est plus élevée, ce qui explique pour cette erreur, car celle-ci dépasse la limite autorisée Apigee Edge
Journaux de processeur de messages
Pour valider l'utilisation des journaux du processeur de messages:
<ph type="x-smartling-placeholder">Si vous êtes un utilisateur de cloud privé, vous pouvez utiliser les journaux du processeur de messages pour vérifier si la taille des en-têtes de réponse a dépassé la limite autorisée dans Apigee Edge.
Vérifiez les journaux 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 (si le problème s'est produit dans le passé) ou s'il existe des demandes échouent toujours avec502
. Vous pouvez utiliser la chaîne de recherche suivante:grep -ri "response headers size exceeding"
- Vous trouverez des lignes provenant de
system.log
semblables à ce qui suit. La taille des en-têtes de réponse peut varier selon votre cas:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
Dès que le processeur de messages reçoit la réponse du backend/de la cible serveur et constate que la taille totale des en-têtes est supérieure à 25 Ko, il s'arrête et génère l'erreur suivante:
response headers size exceeding 25,600
Cela implique que la taille totale de l'en-tête est supérieure à 25 Ko et qu'Apigee génère l'erreur lorsque la taille commence à dépasser la limite de 25 Ko avec un code d'erreur en tant que
protocol.http.TooBigHeaders
Solution
Corriger la taille
Option 1 [recommandée]: correction de l'application du serveur cible pour qu'elle n'envoie pas la taille des en-têtes au-delà de la limite d'Apigee
<ph type="x-smartling-placeholder">- Analyser la raison pour laquelle le serveur cible spécifique envoie plus de taille d'en-tête de réponse que la limite autorisée, telle que définie dans la section Limites.
- Si ce n'est pas souhaitable, modifiez votre application de serveur backend afin qu'elle envoie Les en-têtes de réponse dont la taille est inférieure à la limite autorisée Apigee Edge
- Vérifiez si les informations d'en-tête peuvent être envoyées dans le corps de la réponse.
- Si possible, envoyez les informations importantes que vous prévoyez d'envoyer dans le cadre de l'en-tête dans le corps de la réponse. Vous êtes ainsi certain de ne pas dépasser le nombre limite d'en-tête.
CwC
Option 2 : Utiliser la propriété CwC pour augmenter la limite de taille des en-têtes de réponse
<ph type="x-smartling-placeholder">Apigee fournit un CwC qui permet d'augmenter la limite de taille des en-têtes de réponse. Pour en savoir plus, consultez <ph type="x-smartling-placeholder"></ph> Configurer des limites pour le processeur de messages
<ph type="x-smartling-placeholder">Limites
Apigee s'attend à ce que l'application cliente et le serveur backend n'envoient pas des tailles d'en-tête supérieures à la limite autorisée indiquée pour la taille d'en-tête de requête/réponse dans Limites d'Apigee Edge
- Si vous êtes un utilisateur de cloud public, la limite maximale La taille des en-têtes de requête et de réponse correspond à celle indiquée dans le champ Taille des en-têtes de requête/réponse dans Limites d'Apigee Edge
- Si vous êtes un utilisateur du Private Cloud , il est possible que vous ayez modifié le nombre maximal par défaut pour la taille des en-têtes de requête et de réponse (même s'il ne s'agit pas d'une pratique recommandée). Vous pouvez déterminer la taille maximale d'en-tête de réponse en suivant les instructions fournies dans Vérifier la limite actuelle
Comment vérifier la limite actuelle ?
<ph type="x-smartling-placeholder">
Cette section explique comment vérifier que la propriété HTTPResponse.headers.limit
a
a été mis à jour avec une nouvelle valeur sur les processeurs de messages.
- Sur le processeur de messages, recherchez la propriété
HTTPResponse.headers.limit
dans la/opt/apigee/edge-message-processor/conf
et vérifier consultez la valeur définie ci-dessous:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Voici un exemple de résultat de la commande ci-dessus:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
Dans l'exemple de résultat ci-dessus, notez que la propriété
HTTPResponse.headers.limit
a été définie avec la valeur25k
danshttp.properties
.Cela indique que la limite de taille de la charge utile de réponse configurée dans Apigee pour Private est de 25 Ko.
Si vous avez encore besoin de l'aide de l'assistance Apigee, accédez à Obligation de 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 requêtes API
- Sortie complète de la réponse de la cible/du serveur backend, avec la taille des en-têtes
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'organisation
- Nom de l'environnement
- Groupe de proxys d'API
- Fichier de suivi des requêtes API en échec
- Exécutez la commande
curl
utilisée pour reproduire l'erreur502
. - Sortie complète de la réponse de la cible/du serveur backend, avec la taille des en-têtes
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