Vous consultez la documentation d'Apigee Edge.
Consultez la
documentation Apigee X. en savoir plus
Problème constaté
En réponse aux appels d'API, l'application cliente reçoit un code d'état HTTP 414 Request-URI Too Long
avec le code d'erreur protocol.http.TooBigLine
.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 414 Request-URI Too Long
De plus, le message d'erreur suivant peut s'afficher:
{ "fault":{ "faultstring":"request line size exceeding 7,168", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
Notez que la valeur faultstring
du message d'erreur ci-dessus contient la limite autorisée pour la ligne de requête dans Apigee Edge, à savoir 7168 bytes
(7 Ko).
Causes possibles
Cette erreur se produit si la taille de la ligne de requête envoyée par l'application cliente à Apigee Edge dans le cadre d'une requête HTTP est supérieure à la limite autorisée dans Apigee Edge.
Avant d'examiner les causes possibles de cette erreur, voyons ce que signifie la ligne de requête et comment vérifier sa taille.
Comprendre la ligne de requête
Une requête HTTP type se compose de trois parties:
- Ligne de requête
- ( Ensemble d'en-têtes HTTP )
- [ Corps ]
Comme illustré ci-dessous, la ligne de requête se compose de trois parties.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Lorsqu'une requête HTTP est envoyée par l'application cliente à un serveur, la première ligne envoyée au serveur contient la ligne de requête Request-Line décrite ci-dessus. Viennent ensuite les en-têtes et le corps/la charge utile de la requête.
L'exemple de capture d'écran suivant montre une requête curl
type, la partie Request (Requête) (avec la ligne de requête) et la partie Response (Réponse).
Comprendre la taille de la ligne de requête
- Dans l'exemple décrit ci-dessus, la ligne start (première ligne) de la requête, également appelée Request-Line, se présente comme suit :
GET /test/ HTTP/1.1
La taille de la ligne de requête est
~19 bytes
, car elle contient19 ASCII characters
. Étant donné que cela se situe dans la limite autorisée dans Apigee Edge, la demande est traitée sans erreur et vous obtenez une réponse positive. - De même, si vous examinez
faultstring
dans le message d'erreur ci-dessus, il contient"request line size exceeding 7,168"
. Cela indique que la ligne de requête de la requête HTTP effectuée par le client a dépassé 7 168 octets.
Voici les causes possibles de cette erreur:
Cause | Description | Instructions de dépannage applicables |
---|---|---|
La taille de la charge utile de la requête est supérieure à la limite autorisée | La taille de l'URI de requête (Request-URI) envoyé par l'application cliente dans le cadre de la requête HTTP adressée à Apigee Edge est supérieure à la limite autorisée dans Apigee Edge. | Utilisateurs Edge Public and Private Cloud |
Étapes de diagnostic courantes
Utilisez l'un des outils ou 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 du rôle approprié.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Enquêter).
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
- Tracez le code d'erreur par rapport à l'heure.
- Sélectionnez une cellule ayant le code d'erreur
protocol.http.TooBigLine
et le code d'état414
comme indiqué ci-dessous: Vous verrez les informations sur le code d'erreur
protocol.http.TooBigline
comme indiqué ci-dessous:Cliquez sur Afficher les journaux et développez la ligne de la requête ayant échoué:
Dans la fenêtre Journaux, notez les détails suivants:
- Code d'état:
414
- Source de l'erreur:
apigee
- Code d'erreur:
protocol.http.TooBigLine
. - Longueur de la requête(octets) :
7244 (> 7KB)
- Code d'état:
- Si la source d'erreur a la valeur
apigee
ouMP
, le code d'erreur a la valeurprotocol.http.TooBigLine
et la longueur de la requête (Request-Length) est supérieure à 7 Ko, cela signifie que l'URI de la requête HTTP du client est supérieur à la limite autorisée dans Apigee.
Outil de traçage
NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX, procédez comme suit:
- Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations essentielles sur les erreurs HTTP
414
. 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.
- Recherchez s'il existe des erreurs
414
pendant une durée spécifique (si le problème s'est produit par le passé) ou si des requêtes échouent toujours avec414
. Si vous trouvez des erreurs
414
avec le X-Apigee-fault-code correspondant à la valeur de X-Apigee-fault-code , déterminez la valeur de la source X-Apigee-fault-code .L'exemple d'entrée ci-dessus du journal d'accès NGINX contient les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-code :
En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source policy
Remarque sur la longueur de la requête:
7244
(7,244 Ko > limite autorisée)
Cause: la taille de la charge utile de la requête est supérieure à la limite autorisée
Diagnostic
- Déterminez le code d'erreur, la source de l'erreur et la taille de la longueur de la requête de l'erreur observée à l'aide de l'API Monitoring, Trace Tool ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes.
- Si la source d'erreur a la valeur
apigee
ouMP
, cela indique que la taille de la requête envoyée par l'application cliente à Apigee est supérieure à la limite autorisée dans Apigee Edge. - Vous pouvez vérifier que la taille de la ligne de requête a dépassé la limite autorisée de 7 Ko en utilisant 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 au
faultstring
.faultstring
indique que la taille de la ligne de requête dépasse la limite autorisée de 7 Ko.Exemple de message d'erreur:
"faultstring":"request line size exceeding 7,168"
Demande réelle
Pour valider à l'aide de la requête réelle:
Si vous avez accès à la requête réelle envoyée par l'application cliente, procédez comme suit:
- Vérifiez la taille de l'URI transmis dans la requête.
Si vous constatez que la taille de l'URI dépasse la limite autorisée dans Apigee Edge, c'est la cause du problème.
Exemple de requête:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
Dans le cas ci-dessus, la valeur du paramètre de requête
qparam
est supérieure à 7 Ko, c'est-à-dire qu'elle contient plus de 7 000 caractères ASCII.Si vous utilisez un autre client, vous pouvez consulter les journaux du client et essayer de connaître la taille de la ligne de requête envoyée à Apigee Edge.
Journaux du processeur de messages
Pour valider à l'aide des journaux du processeur de messages:
Si vous êtes un utilisateur de cloud privé, vous pouvez utiliser les journaux du processeur de messages pour vérifier si la taille de la ligne de requête 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
- Recherchez s'il existe des erreurs
414
pendant une durée spécifique (si le problème s'est déjà produit par le passé) ou si des requêtes échouent toujours avec414
. Vous pouvez utiliser les chaînes de recherche suivantes.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Vous verrez des lignes de
system.log
semblables à ce qui suit :2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
Le texte
message = request line size exceeding 7,168
dans le message d'erreur ci-dessus indique que la taille de l'URI de la requête est supérieure à 7 Ko. Par conséquent, Apigee Edge génère l'exceptioncom.apigee.errors.http.user.RequestURITooLong
et renvoie le code d'état414
avec le code d'erreurprotocol.http.TooBigline
aux applications clientes.
Résolution
Corriger la taille
Option 1 [recommandée]: empêcher l'application cliente d'envoyer une taille d'URI de requête supérieure à la limite autorisée
- Analysez la raison pour laquelle le client spécifique doit envoyer une taille d'URI de la requête supérieure à la limite autorisée, telle que définie dans Limites.
Si ce n'est pas ce que vous souhaitez, modifiez votre application cliente de sorte qu'elle envoie une taille d'URI de requête inférieure à la limite autorisée.
Dans l'exemple décrit ci-dessus, vous pouvez résoudre le problème en transmettant le paramètre de requête long dans le corps ou la charge utile de la requête au lieu de le transmettre dans l'URL de la requête, comme indiqué ci-dessous:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- Si vous souhaitez envoyer un URI plus élevé que la limite autorisée, passez aux options suivantes.
CwC
Option 2 : Utiliser la propriété CwC pour augmenter le nombre maximal de lignes de requête
Apigee fournit une propriété CwC qui lui permet d'augmenter la taille maximale des lignes de requête. Pour en savoir plus, consultez Définir le nombre maximal de lignes de requête 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 telle que documentée pour le nombre maximal de lignes de requête/réponse dans Limites périphériques Apigee.
- Si vous êtes un utilisateur du cloud public, la limite maximale de taille des lignes de requête et de réponse est indiquée pour la taille de la ligne de requête/de réponse dans les limites d'Apigee.
- Si vous êtes un utilisateur du cloud privé , vous avez peut-être modifié la limite maximale par défaut pour la taille des requêtes et des lignes de réponse (même si ce n'est pas une pratique recommandée). Pour déterminer la taille maximale des lignes de requête, suivez les instructions de la section Vérifier la limite actuelle.
Comment vérifier la limite actuelle ?
Cette section explique comment vérifier que la propriété HTTPRequest.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é
HTTPRequest.line.limit
dans le répertoire/opt/apigee/edge-message-processor/conf
et vérifiez la valeur qui a été définie comme indiqué ci-dessous :grep -ri "HTTPRequest.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:HTTPRequest.line.limit=7k
Dans l'exemple de sortie ci-dessus, notez que la propriété
HTTPRequest.line.limit
a été définie avec la valeur7k
danshttp.properties
.Cela indique que la taille maximale de la ligne de requête configurée dans Apigee pour le cloud privé est de 7 Ko.
Si vous avez encore besoin d'aide de l'assistance Apigee, consultez la section Vous devez 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:
- Le nom de l'organisation.
- Nom de l'environnement
- Nom du proxy d'API
- Complétez la commande
curl
permettant de reproduire l'erreur414
. - 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 ayant échoué
- Le nom de l'organisation.
- Nom de l'environnement
- Groupe de proxys d'API
- Fichier de suivi des requêtes API ayant échoué
- Complétez la commande
curl
permettant de reproduire l'erreur414
. 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.
- Journaux système du processeur de messages
/opt/apigee/var/log/edge-message-processor/logs/system.log