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.TooBigLine 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
En outre, le message d'erreur suivant peut s'afficher :
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}Causes possibles
Cette erreur se produit si la taille de la ligne de réponse envoyée par le serveur cible/backend à Apigee Edge dans le cadre de la réponse HTTP est supérieure à la limite maximale autorisée dans Apigee Edge.
Avant d'examiner les causes possibles de cette erreur, comprenons ce que signifie la ligne de réponse et comment vérifier sa taille.
Comprendre la ligne de réponse
Une réponse HTTP typique comporte trois parties :
- Ligne d'état (appelée ligne de réponse dans Apigee)
- ( Ensemble d'en-têtes HTTP )
- [ Corps ]
La ligne de réponse comporte trois parties : la version du protocole, suivie d'un code d'état numérique et de sa phrase textuelle associée, comme illustré ci-dessous :
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Lorsqu'une réponse HTTP est envoyée par l'application serveur cible/backend, la première ligne qui est
envoyée représente la ligne de réponse , comme décrit ci-dessus. Elle est suivie des
en-têtes et du corps/de la charge utile de la réponse.L'exemple de capture d'écran suivant montre une requête
curl typique, la partie Request (Requête) et la partie Response (Réponse) (ainsi que la
ligne de réponse).
Comprendre la taille de la ligne de réponse
Dans l'exemple ci-dessus, la ligne de début (première ligne) de la réponse, également appelée ligne de réponse , est la suivante :
HTTP/1.1 200 OK
Cette ligne de réponse a une taille d'environ
~15 bytes, car elle contient15 ASCII characters. Comme cette taille est inférieure à la limite autorisée dans Apigee Edge, la réponse est renvoyée au client sans erreur par Apigee Edge.- De même, si vous examinez le
faultstringdans le message d'erreur affiché ci-dessus, il contient"response line size exceeding 2,048". Cela indique que la ligne de réponse dans la réponse HTTP envoyée par le serveur cible/backend a dépassé 2 048 octets.
Comprendre les lignes de réponse volumineuses
Conformément à la définition de la ligne d'état (appelée ligne de réponse ici) et aux requêtes et réponses HTTP typiques, la taille est beaucoup plus petite que la limite par défaut définie de 2 Ko dans Apigee Edge. Il est donc possible que nous n'atteignions pas la limite. Toutefois, voici quelques scénarios possibles dans lesquels vous pouvez dépasser cette limite :
- Le serveur cible/backend n'est pas un système HTTP. Il peut répondre avec une réponse non HTTP réponse.
- Le serveur cible/backend rencontre des problèmes et envoie une longue ligne de réponse dans le cadre de la réponse HTTP réponse.
Pour en savoir plus, consultez la section Erreur d'obtention du protocole.http.TooBigLine, "response line size exceeding 2,048.
Voici les causes possibles de l'erreur :
| Cause | Description | Instructions de dépannage applicables |
|---|---|---|
| La taille de la ligne de réponse est supérieure à la limite autorisée | La taille de la ligne de réponse envoyée 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 du cloud public et privé Edge |
É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.TooBigLine, comme illustré ci-dessous :( afficher l'image en plus grand)
Les informations sur le code d'erreur
protocol.http.TooBigLines'affichent, comme illustré ci-dessous :( afficher l'image en plus grand)
Cliquez sur View logs (Afficher les journaux) et 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.TooBigLine.
- Code d'état :
- Si la source de l'erreur a la valeur
targetet que le code d'erreur a la valeurprotocol.http.TooBigLine, cela indique que la réponse HTTP du serveur cible/ backend a une taille de ligne de réponse supérieure à la limite maximale 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.
L'erreur se trouve généralement dans l'
flowinfoerreur juste après la phase Request sent to target server (Requête envoyée au serveur cible), comme illustré ci-dessous :
Notez les valeurs de l'erreur à partir de la trace :
- error :
response line exceeding 2,048 - 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 en raison d'une taille de ligne de réponse dépassant la limite autorisée.
- error :
Le message d'erreur envoyé au client s'affiche dans la phase Response Sent to Client (Réponse envoyée au client), comme illustré ci-dessous :
( afficher l'image en plus grand)
- Notez les valeurs de l'erreur à partir de la trace :
- Erreur :
502 Bad Gateway. - Contenu de l'erreur
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Erreur :
Vous pouvez également accéder à la phase AX (Données Analytics enregistrées) dans la trace et cliquer dessus pour afficher les détails de l'erreur.
( afficher l'image en plus grand)
Notez la valeur des éléments suivants :
En-têtes de requête Valeur X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetContenu de l'erreur : corps {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX :
- Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux d'accès NGINX pour
déterminer les informations clés sur les erreurs HTTP
502. Vérifiez 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 s'il existe des erreurs
502pendant 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.TooBigLine, déterminez la valeur de la source de l'erreur X-Apigee.
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 de réponse Valeur X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source target
Cause : La taille de la ligne de réponse est supérieure à la limite autorisée
Diagnostic
- Déterminez le code d'erreur et la source de l'erreur 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 la section Étapes de diagnostic courantes.
- Si la source de l'erreur a la valeur
target, cela indique que la taille de la ligne de réponse envoyée par l'application serveur cible/backend à Apigee est supérieure à la limite autorisée dans Apigee Edge. Vous pouvez vérifier que la taille de la ligne de réponse a dépassé la limite autorisée de 2 Ko à 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, reportez-vous à
faultstring.Exemple de message d'erreur :
"faultstring":"response line size exceeding 2,048"
Le
faultstringci-dessus indique que la taille de la ligne de réponse a dépassé la limite autorisée de 2 Ko.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 à l'application serveur cible/backend, procédez comme suit :
- Vérifiez la taille de la ligne de réponse.
- Si vous constatez que la taille de l'URI 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/backend :
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
Dans le cas ci-dessus, la ligne de réponse
HTTP/1.1 200 1111…<trimmed>...11111111est supérieure à 2 Ko, c'est-à-dire qu'elle contient plus de 2 000 caractères ASCII.Si vous utilisez un autre client, vous pouvez consulter les journaux du client et essayer de déterminer la taille de la ligne de réponse envoyée à Apigee Edge.
Journaux du processeur de messages
Pour effectuer la validation à l'aide des journaux du processeur de messages :
Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux du processeur de messages pour vérifier si la taille de la ligne de réponse a dépassé la limite autorisée dans Apigee Edge.
- Déterminez l'ID de message de la requête ayant échoué à l'aide de la surveillance des API, de l'outil Trace, ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes.
Recherchez l'ID de message dans le journal du processeur de messages :
/opt/apigee/var/log/edge-message-processor/logs/system.logVous trouverez des lignes de
system.logsemblables à celles-ci :2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
Le texte
message = response line size exceeding 2,048dans le message d'erreur ci-dessus indique que la taille de la ligne de réponse est supérieure à 2 Ko. Par conséquent, Apigee Edge génère l'exception et renvoie un code d'état502avec code d'erreurprotocol.http.TooBiglineaux applications clientes.
Solution
Taille fixe
Option 1 [recommandée]: Corrigez l'application serveur cible/backend pour qu'elle n'envoie pas de lignes de réponse dont la taille est supérieure à la limite autorisée
- Analysez la raison pour laquelle le client spécifique envoie une ligne de réponse dont la taille est supérieure à la limite autorisée, comme défini dans la section Limites.
- Si ce n'est pas souhaitable, modifiez votre application serveur cible/backend afin qu'elle envoie une ligne de réponse dont la taille est inférieure à la limite autorisée.
- Si cela est souhaitable et que vous souhaitez envoyer une ligne de réponse dont la taille est supérieure à la limite autorisée, passez aux options suivantes.
CwC
Option 2 : Utilisez la propriété CwC pour augmenter la limite de la ligne de réponse
Apigee fournit une propriété CwC qui lui permet d'augmenter la limite de taille de la ligne de réponse. Pour en savoir plus, consultez la section Définir la limite de la ligne de réponse sur le processeur de messages.
Limites
Apigee s'attend à ce que l'application cliente et le serveur backend n'envoient pas de lignes de requête/réponse dont la taille est supérieure à la limite autorisée, comme indiqué pour la limite de ligne de requête/réponse dans la section Limites d'Apigee Edge.
- Si vous êtes un utilisateur du cloud public, la limite maximale pour la taille de la ligne de requête et de réponse est celle indiquée pour la taille de la ligne de requête/réponse dans la section Limites d'Apigee Edge.
- Si vous êtes un utilisateur du cloud privé, vous avez peut-être modifié la limite maximale par défaut pour la taille de la ligne 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 la taille de la ligne 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.line.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.line.limitdans le répertoire/opt/apigee/edge-message-processor/confet vérifiez la valeur définie, comme illustré ci-dessous :grep -ri "HTTPResponse.line.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.line.limit=2k
Dans l'exemple de résultat ci-dessus, notez que la propriété
HTTPResponse.line.limita été définie avec la valeur2kdanshttp.properties.Cela indique que la limite de taille de la ligne de réponse configurée dans Apigee pour le cloud privé est de 2 Ko.
Si vous avez encore besoin d'aide de la part 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 du cloud public, fournissez les informations suivantes :
- Nom de l'organisation
- Nom de l'environnement
- Nom du proxy d'API
- Commande curl complète utilisée pour reproduire l'erreur
502 - Fichier de trace pour les requêtes API
Si vous êtes un utilisateur du cloud privé, 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 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