Vous consultez la documentation Apigee Edge.
Accédez à la
documentation**Apigee X**. info
Problème constaté
L'application cliente reçoit un code d'état HTTP 502 Bad Gateway avec
le code d'erreur protocol.http.TooBigHeaders en réponse aux appels d'API.
Message d'erreur
L'application cliente reçoit le code de réponse suivant :
HTTP/1.1 502 Bad Gateway
Vous pouvez également observer le message d'erreur suivant :
{
"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 le serveur cible/backend à Apigee Edge dans le cadre de la réponse HTTP est supérieure à la limite autorisée 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 de tous les en-têtes envoyés par le serveur cible/backend dans le cadre de la réponse HTTP à Apigee Edge est supérieure à la limite autorisée dans Apigee Edge. | Utilisateurs d'Edge Public Cloud et Private Cloud |
Étapes de diagnostic courantes
Utilisez l'un des outils/techniques suivants pour diagnostiquer cette erreur :
Surveillance des API
Pour diagnostiquer l'erreur à l'aide de la surveillance des API :
- Connectez-vous à l'interface utilisateur Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Basculez vers l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyze > API Monitoring > Investigate (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.
- Tracez le code d'erreur par rapport au temps.
Sélectionnez une cellule contenant le code d'erreur
protocol.http.TooBigHeaders, comme illustré ci-dessous :
Les informations sur le code d'erreur
protocol.http.TooBigHeaderss'affichent, comme illustré ci-dessous :
Cliquez sur View logs (Afficher les journaux), puis développez la ligne de la requête ayant échoué.
- Dans la fenêtre Logs (Journaux), notez les détails suivants :
- Code d'état :
502 - Source de l'erreur :
target - Code d'erreur :
protocol.http.TooBigHeaders.
- Code d'état :
- Si la source de l'erreur a la valeur
targetet que le code d'erreur 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 à la limite autorisée dans Apigee Edge.
Outil Trace
- Activez la session de trace
puis :
- attendez que l'erreur
502 Bad Gatewayse produise ; ou - 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.
- Parcourez les différentes phases de la trace et identifiez l'endroit où l'échec s'est produit.
En règle générale, cette erreur s'affiche dans le flux nommé Error juste après la Request sent to target server phase, comme illustré ci-dessous :
Notez les valeurs de l'erreur dans la trace :
- error :
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
Cela indique qu'Apigee Edge (composant du processeur de messages) génère l'erreur dès qu'il reçoit la réponse du serveur backend, car la taille d'un en-tête dépasse la limite autorisée.
- error :
L'échec s'affiche dans la réponse d'erreur Response Sent to Client (Réponse envoyée au client) envoyée par Apigee Edge, comme illustré ci-dessous :
- Notez les valeurs de l'erreur dans la trace. L'exemple de trace ci-dessus montre :
- Error (Erreur) :
502 Bad Gateway. - Error Content:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Error (Erreur) :
Accédez à la phase AX (Analytics Data Recorded, Données d'analyse 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.TooBigHeadersX-Apigee-fault-source targetContenu de l'erreur : corps {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX :
- Si vous êtes un utilisateur de Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour
déterminer les informations clés sur l'erreur HTTP
502 Bad Gateway. Consultez les journaux d'accès NGINX :
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logOù : ORG, ENV et PORT# sont remplacés par des valeurs réelles.
- Recherchez les erreurs
502avec le code d'erreurprotocol.http.TooBigHeaderspendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec502. Si vous trouvez des erreurs
502avec le X-Apigee-fault-code correspondant à la valeurprotocol.http.TooBigHeaders, déterminez la valeur de X-Apigee-fault-source.Exemple d'erreur 502 dans le journal d'accès NGINX :
L'entrée d'exemple ci-dessus du journal d'accès NGINX comporte les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-source :
En-têtes d'erreur Valeur X-Apigee-fault-code protocol.http.TooBigHeadersX-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 de l'erreur et la taille de la charge utile de la réponse pour l' erreur observée à l'aide de la surveillance des API, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans les étapes de diagnostic courantes.
- Si la source de l'erreur 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 à 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 est
supérieure à la limite autorisée à l'aide de l'une des méthodes suivantes :
Message d'erreur
Pour effectuer la validation à l'aide du message d'erreur :
Si vous avez accès au message d'erreur complet reçu d'Apigee Edge, alors consultez le
faultstring. Lefaultstringindique 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 le
faultstringque la réponse comporte des en-têtes dont la taille totale dépasse la limite autorisée.Requête 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, procédez comme suit :
- Si vous êtes un utilisateur de Public Cloud/Private Cloud, adressez une requête directement au serveur backend à partir du serveur backend lui-même ou de toute autre machine à partir de laquelle vous êtes autorisé à adresser la requête au serveur backend.
- Si vous êtes un utilisateur de Private Cloud, vous pouvez également adresser la requête au serveur backend à partir de l'un des processeurs de messages.
- Examinez la réponse reçue du serveur backend, puis calculez et vérifiez spécifiquement 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 est supérieure à la limite autorisée dans Apigee Edge, il s'agit de 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,
Testheader1etTestheader2ont des tailles plus élevées, ce qui est la cause de cette erreur, car elles dépassent la limite autorisée dans Apigee Edge.
Journaux du processeur de messages
Pour effectuer la validation à l'aide des journaux du processeur de messages :
Si vous êtes un utilisateur de Private Cloud, 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.
Consultez les journaux du processeur de messages :
/opt/apigee/var/log/edge-message-processor/logs/system.log- Recherchez les erreurs
502pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec l'erreur502. Vous pouvez utiliser la chaîne de recherche suivante :grep -ri "response headers size exceeding"
- Vous trouverez des lignes de
system.logsemblables à celles-ci. La taille des en-têtes de réponse peut varier dans 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 serveur backend/cible 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 :
response headers size exceeding 25,600Cela 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 le code d'erreur comme
protocol.http.TooBigHeaders
Solution
Taille fixe
Option 1 [recommandée]: Empêchez l'application du serveur cible d'envoyer des en-têtes dont la taille dépassant la limite Apigee
- Analysez la raison pour laquelle le serveur cible spécifique envoie une taille d'en-tête de réponse supérieure à la limite autorisée, comme défini dans la section Limites.
- Si ce n'est pas souhaitable, modifiez votre application de serveur backend afin qu'elle envoie des en-têtes de réponse dont la taille est inférieure à la limite autorisée dans 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 toutes les informations volumineuses que vous prévoyiez d'envoyer dans l'en-tête dans le corps de la réponse. Vous ne dépasserez ainsi pas la limite d'en-tête de réponse.
CwC
Option 2 : Utilisez la propriété CwC pour augmenter la limite de taille de l'en-tête de réponse
Apigee fournit une propriété CwC qui lui permet d'augmenter la limite de taille des en-têtes de réponse. Pour en savoir plus, consultez la section Configurer les limites du processeur de messages
Limites
Apigee s'attend à ce que l'application cliente et le serveur backend n'envoient pas de tailles d'en-tête supérieures à la limite autorisée, comme indiqué pour la taille de l'en-tête de requête/réponse dans la section Limites d'Apigee Edge.
- Si vous êtes un utilisateur de Public Cloud, la limite maximale pour la taille des en-têtes de requête et de réponse est celle indiquée pour la taille de l'en-tête de requête/réponse dans la section Limites d'Apigee Edge.
- Si vous êtes un utilisateur de Private Cloud, vous avez peut-être modifié la limite maximale par défaut pour la taille des en-têtes de requête et de réponse (même si ce n'est pas une pratique recommandée). Vous pouvez déterminer la limite maximale de taille des en-têtes de réponse en suivant les instructions de la section Comment vérifier la limite actuelle ?.
Comment vérifier la limite actuelle ?
Cette section explique comment vérifier que la propriété HTTPResponse.headers.limit a
été mise à jour avec une nouvelle valeur sur les processeurs de messages.
- Sur la machine du processeur de messages, recherchez la propriété
HTTPResponse.headers.limitdans le répertoire/opt/apigee/edge-message-processor/confet vérifiez la valeur définie, comme illustré ci-dessous :grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- L'exemple de résultat de la commande ci-dessus est le suivant :
/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.limita été définie avec la valeur25kdanshttp.properties.Cela indique que la limite de taille de la charge utile de la réponse configurée dans Apigee pour Private Cloud est de 25 Ko.
Si vous avez encore besoin de l'assistance de l'assistance Apigee, consultez la section Vous devez collecter 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 Public Cloud, fournissez les informations suivantes :
- Nom de l'organisation
- Nom de l'environnement
- Nom du proxy d'API
- Commande
curlcomplète utilisée pour reproduire l'erreur502 - Fichier de trace pour les requêtes API
- Résultat complet de la réponse du serveur cible/backend, ainsi que la taille des en-têtes
Si vous êtes un utilisateur de Private Cloud, fournissez les informations suivantes :
- Message d'erreur complet observé pour les requêtes ayant échoué
- Nom de l'organisation
- Nom de l'environnement
- Bundle de proxy d'API
- Fichier de trace pour les requêtes API ayant échoué
- Commande
curlcomplète utilisée pour reproduire l'erreur502 - Résultat complet de la réponse du serveur cible/backend, ainsi que la taille des en-têtes
Journaux d'accès NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logOù : 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