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 431 Request Header Fields Too
Large 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 431 Request Header Fields Too Large
Vous pouvez également observer le message d'erreur suivant :
{
"fault":{
"faultstring":"request headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Causes possibles
Cette erreur se produit si la taille totale de tous les en-têtes de requête envoyés par l'application cliente à Apigee Edge dans le cadre de la requête HTTP est supérieure à la limite autorisée dans Apigee Edge, conformément à la section 5 de la RFC 6585 : 431 Request Header Fields Too Large.
Voici les causes possibles de cette erreur :
| Cause | Description | Instructions de dépannage applicables |
|---|---|---|
| La taille des en-têtes de requête est supérieure à la limite autorisée | La taille totale de tous les en-têtes envoyés 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 pendant 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.TooBigHeaderset le code d'état431, 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) 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 :
431 - Source de l'erreur :
apigee - Code d'erreur :
protocol.http.TooBigHeaders - Longueur de la requête(en octets)
32150 (> 25 KB)
- Code d'état :
- Si la source de l'erreur a la valeur
apigeeouMP, le code d'erreur a la valeurprotocol.http.TooBigHeaderset la longueur de la requête est supérieure à 25 Ko, cela indique que la taille totale de tous les en-têtes de requête envoyés par l'application cliente dans le cadre de la requête HTTP est supérieure à 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
431. 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
431pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec431. Si vous trouvez des erreurs
431avec le X-Apigee-fault-code correspondant à la valeurprotocol.http.TooBigHeaders, déterminez la valeur de la X-Apigee-fault-source.
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.TooBigHeadersX-Apigee-fault-source MPNotez la longueur de la requête
40159(40 Ko est supérieur à 25 Ko, la limite autorisée pour les en-têtes de requête dans Apigee Edge)Dans l'entrée de journal d'exemple ci-dessus, la X-Apigee-fault-source a la valeur
apigeeouMP, la X-Apigee-fault-code a la valeurprotocol.http.TooBigHeaderset la longueur de la requête est de 40 Ko, ce qui est supérieur à la limite autorisée dans Apigee (25 Ko). Cela indique clairement que la taille totale de tous les en-têtes de requête envoyés par l'application cliente dans le cadre de la requête HTTP a dépassé la limite autorisée de 25 Ko dans Apigee Edge.
Cause : La taille des en-têtes de 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 ou des journaux d'accès NGINX, comme expliqué dans les Étapes de diagnostic courantes.
- Si la source de l'erreur a la valeur
apigeeouMP, le code d'erreur a la valeurprotocol.http.TooBigHeaders, et la longueur de la requête est supérieure à 25 Ko, 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 des en-têtes de requête a dépassé la limite autorisée de 25 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 consultez le
faultstring. Lefaultstringindique que la taille totale des en-têtes de requête a dépassé la limite autorisée de 25 Ko.Exemple de message d'erreur :
"faultstring":"request headers size exceeding 25,600"
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 des en-têtes transmis dans la requête.
Si vous constatez que la taille totale des en-têtes est supérieure à la limite autorisée dans Apigee Edge, il s'agit de la cause du problème.
Exemple de requête :
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
Dans le cas ci-dessus, la taille totale des en-têtes
header0,header1,header2, etheader3est supérieure à 25 Ko, c'est-à-dire qu'elle contient plus de 25 000 caractères ASCII (octets).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 des en-têtes 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
431pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec431. Vous pouvez utiliser les chaînes de recherche suivantes.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Vous trouverez des lignes de
system.logsemblables à celles-ci :2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
Le texte
message = request headers size exceeding 25,600dans le message d'erreur ci-dessus indique que la taille totale des en-têtes de requête est supérieure à 25 Ko. Par conséquent, Apigee Edge génère l'exceptioncom.apigee.errors.http.user.RequestHeadersTooLargeet renvoie le code d'état431avec le code d'erreurprotocol.http.TooBigHeadersaux applications clientes.
Solution
Taille fixe
Option 1 [recommandée]: Corrigez l'application cliente pour qu'elle n'envoie pas d'en-têtes de requête dont la taille totale est supérieure à la limite autorisée
- Analysez la raison pour laquelle le client spécifique envoie un en-tête de requête de grande taille, ce qui fait que la taille totale de l'en-tête dépasse la limite autorisée, comme défini dans la section Limites.
Si ce n'est pas souhaitable, modifiez votre application cliente afin qu'elle envoie des en-têtes de requête d'une taille inférieure à la limite autorisée.
Dans l'exemple ci-dessus, vous pouvez résoudre le problème en transmettant le paramètre des valeurs d'en-tête longues dans le corps/la charge utile de la requête :
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- Si cela est souhaitable et que vous souhaitez envoyer un en-tête supérieur à la limite autorisée, passez à l' option suivante.
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 d'en-têtes de requête/réponse dont la taille est supérieure à la limite autorisée, comme indiqué dans la section Limite de taille des en-têtes de requête/réponse dans les 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 des en-têtes de requête/réponse dans les 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 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.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é
HTTPRequest.headers.limitdans le répertoire/opt/apigee/edge-message-processor/confet vérifiez la valeur définie, comme illustré ci-dessous :grep -ri "HTTPRequest.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:HTTPRequest.headers.limit=25k
Dans l'exemple de résultat ci-dessus, notez que la propriété
HTTPRequest.headers.limita été définie avec la valeur25kdanshttp.properties.Cela indique que la limite de taille des en-têtes de requête configurée dans Apigee pour Private Cloud est de 25 Ko.
Spécification
Apigee Edge s'attend à ce que l'application cliente n'envoie pas d'en-têtes de grande taille dans le cadre de la
requête. Si la requête contient des en-têtes dont la taille totale est supérieure à la limite spécifiée,
Apigee génère 431 Request Header Fields Too Large conformément aux spécifications RFC
suivantes :
| Spécification |
|---|
| RFC 6585, section 5: 431 Request Header Fields Too Large (en anglais) |
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'erreur431 - Fichier de trace pour les requêtes 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 API ayant échoué
- Commande
curlcomplète utilisée pour reproduire l'erreur431 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