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 414 Request-URI Too Long 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 414 Request-URI Too Long
Vous pouvez également observer le message d'erreur suivant :
{
"fault":{
"faultstring":"request line size exceeding 7,168",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}
Notez que le faultstring du message d'erreur ci-dessus contient la limite autorisée
pour la ligne de requête dans Apigee Edge, qui est de 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, comprenons ce que signifie la ligne de requête et comment vérifier sa taille.
Comprendre la ligne de requête
Une requête HTTP standard comporte trois parties :
- Ligne de requête
- ( Ensemble d'en-têtes HTTP )
- [ Corps ]
La ligne de requête comporte trois parties, comme indiqué ci-dessous.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Lorsqu'une application cliente envoie une requête HTTP à un serveur, la première ligne qui est envoyée au serveur contient la ligne de requête décrite ci-dessus. Elle est suivie des en-têtes et du corps/de la charge utile de la requête.
L'exemple de capture d'écran suivant montre une requête curl standard, la partie Request (avec la ligne de requête) et la partie Response.
Comprendre la taille de la ligne de requête
- Dans l'exemple ci-dessus, la ligne de début (première ligne) de la requête, également
appelée ligne de requête, est la suivante :
GET /test/ HTTP/1.1
La taille de la ligne de requête est de
~19 bytes, car elle contient19 ASCII characters. Comme cette taille est inférieure à la limite autorisée dans Apigee Edge, la requête est traitée sans erreur et vous obtenez une réponse positive. - De même, si vous examinez le
faultstringdu message d'erreur affiché ci-dessus, il contient"request line size exceeding 7,168". Cela indique que la ligne de requête de la requête HTTP envoyé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 envoyé par l'application cliente dans le cadre de la requête 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.
- Tracez le code d'erreur par rapport au temps.
- Sélectionnez une cellule contenant le code d'erreur
protocol.http.TooBigLineet le code d'état414comme indiqué ci-dessous :
Les informations sur le code d'erreur
protocol.http.TooBiglines'affichent, comme indiqué ci-dessous :
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 informations suivantes :
- Code d'état :
414 - Source de l'erreur :
apigee - Code d'erreur :
protocol.http.TooBigLine - Longueur de la requête(en octets)
7244 (> 7KB)
- Code d'état :
- Si la source de l'erreur a la valeur
apigeeouMP, que le code d'erreur a la valeurprotocol.http.TooBigLineet que la longueur de la requête est supérieure à 7 Ko, cela indique que la requête HTTP du client a un URI de requête supérieur à la limite autorisée dans Apigee.
Outil Trace
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 les erreurs HTTP
414. 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 les erreurs
414sur une période spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec414. Si vous trouvez des erreurs
414avec le X-Apigee-fault-code correspondant à la valeurprotocol.http.TooBigLine, déterminez la valeur de la source de l'erreur X-Apigee.
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-source :
En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source policyNotez 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 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
apigeeouMP, 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 à 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 reportez-vous au
faultstring. Lefaultstringindique que la taille de la ligne de requête a dépassé la limite autorisée de 7 Ko.Exemple de message d'erreur :
"faultstring":"request line size exceeding 7,168"
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 effectué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 est supérieure à la limite autorisée dans Apigee Edge, il s'agit de 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
qparamest 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 déterminer la taille de la ligne de requête 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 de Private Cloud, 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 les erreurs
414sur une période spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec le code414. Vous pouvez utiliser les chaînes de recherche suivantes.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Vous trouverez des lignes de
system.logsemblables à celles-ci :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,168du message d'erreur ci-dessus indique que la taille de l'URI de la demande est supérieure à 7 ko. Par conséquent, Apigee Edge génère l'exceptioncom.apigee.errors.http.user.RequestURITooLonget renvoie le code d'état414avec le code d'erreurprotocol.http.TooBiglineaux applications clientes.
Solution
Taille fixe
Option 1 [recommandée]: Corrigez l'application cliente pour qu'elle n'envoie pas une taille d'URI de la demande supérieure à la limite autorisée
- Analysez la raison pour laquelle le client spécifique envoie une taille d'URI de la demande supérieure à la limite autorisée comme défini dans Limites.
Si ce n'est pas souhaitable, modifiez votre application cliente afin qu'elle envoie une taille d'URI de la demande inférieure à la limite autorisée.
Dans l'exemple ci-dessus, vous pouvez résoudre le problème en transmettant le paramètre de requête long dans le corps/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 cela est souhaitable et que vous souhaitez envoyer un URI supérieur à la limite autorisée, passez aux options suivantes.
CwC
Option 2 : Utilisez la propriété CwC pour augmenter la limite de la ligne de requête
Apigee fournit une propriété CwC qui lui permet d'augmenter la limite de taille de la ligne de requête. Pour en savoir plus, consultez Définir la limite de la ligne 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, comme indiqué pour la limite de la ligne de requête/réponse dans Limites d'Apigee Edge.
- Si vous êtes un utilisateur de Public Cloud, 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 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 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 requête 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é 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.limitdans le/opt/apigee/edge-message-processor/confrépertoire et vérifiez la valeur 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 résultat ci-dessus, notez que la propriété
HTTPRequest.line.limita été définie avec la valeur7kdanshttp.properties.Cela indique que la limite de la taille de la ligne de requête configurée dans Apigee pour Private Cloud est de 7 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 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'erreur414 - Fichier de trace pour les requêtes d'API
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 d'API ayant échoué
- Commande
curlcomplète utilisée pour reproduire l'erreur414 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