<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Symptôme
L'application cliente reçoit le code d'état HTTP 431 Request Header Fields Too
Large
avec le code d'erreur protocol.http.TooBigHeaders
comme réponse de l'API.
appels.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 431 Request Header Fields Too Large
Le message d'erreur suivant peut également s'afficher:
{ "fault":{ "faultstring":"request headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }<ph type="x-smartling-placeholder">
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 à <ph type="x-smartling-placeholder"></ph> RFC 6585, section 5: 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 vers Apigee Edge est supérieur à la limite autorisée dans Apigee Edge. | Utilisateurs Edge de cloud public et privé |
Étapes de diagnostic courantes
Utilisez l'une des techniques ou l'un des outils suivants pour diagnostiquer ce problème:
Surveillance des API
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'API Monitoring, procédez comme suit:
- <ph type="x-smartling-placeholder"></ph> Connectez-vous à l'interface utilisateur d'Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à Analyser > Surveillance des API > Examiner.
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
- Représentez le code d'erreur par rapport à l'heure.
- Sélectionnez une cellule avec le code d'erreur
protocol.http.TooBigHeaders
et code d'état431
comme indiqué ci-dessous: Vous verrez les informations sur le code d'erreur
protocol.http.TooBigHeaders
. comme indiqué ci-dessous:Cliquez sur Afficher les journaux et développez la ligne correspondant à la requête ayant échoué:
Dans la fenêtre 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(octets) :
32150 (> 25 KB)
- Code d'état:
- Si la source de la défaillance a la valeur
apigee
ouMP
, le Le code d'erreur a la valeurprotocol.http.TooBigHeaders
et la longueur de la requête est supérieure à 25 Ko, ce qui signifie que la taille totale de la requête tous les en-têtes de requête envoyés par l'application cliente que limite autorisée dans Apigee. <ph type="x-smartling-placeholder">
Outil Trace
<ph type="x-smartling-placeholder">NGINX
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX:
- Si vous êtes un utilisateur du Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour
déterminer les informations clés concernant les erreurs HTTP
431
. 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.
- Effectuez une recherche pour voir s'il existe des erreurs
431
pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent encore avec431
Si vous trouvez des erreurs
431
avec le code X-Apigee-fault-code correspondant à la valeur deprotocol.http.TooBigHeaders
, puis déterminez la valeur de X-Apigee-fault-source.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-code
En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source MP
Notez la longueur de la requête:
40159
(40 Ko est supérieur à 25 Ko, limite autorisée pour les en-têtes de requête dans Apigee Edge)Dans l'exemple d'entrée de journal ci-dessus, X-Apigee-fault-source a pour valeur
<ph type="x-smartling-placeholder">apigee
ouMP
, X-Apigee-fault-code a pour valeurprotocol.http.TooBigHeaders
et la longueur de la requête est de 40 Ko, soit supérieure à la limite autorisée dans Apigee, soit 25 Ko. Cela indique clairement que le taille totale de tous les en-têtes de requête envoyés par l'application cliente dans le cadre 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 d'erreur et la taille de la longueur de la requête pour l'erreur observée à l'aide des journaux d'accès de NGINX ou de surveillance de l'API, comme expliqué dans Étapes de diagnostic courantes.
- Si la source de la défaillance a la valeur
apigee
ouMP
, le code d'erreur a la valeurprotocol.http.TooBigHeaders
, et que la longueur de la requête est supérieure à 25 Ko, indique que la taille de la requête envoyée par l'application cliente à Apigee est supérieure à 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
les 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 à
faultstring
. Lefaultstring
indique que la taille totale des en-têtes de requête dépasse la limite autorisée (25 Ko).Exemple de message d'erreur:
"faultstring":"request headers size exceeding 25,600"
Demande 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, puis effectuez les étapes suivantes:
- Vérifiez la taille des en-têtes transmis dans la requête.
Si vous trouvez que la taille totale des en-têtes est supérieure à celle limite autorisée dans Apigee Edge, celle-ci 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
etheader3
est supérieur à 25 Ko, c'est-à-dire qu'il contient plus de 25 000 caractères ASCII (octets).Si vous utilisez un autre client, vous pouvez consulter les journaux du client et essayez de trouver la taille de la ligne de demande envoyée à Apigee Edge.
Journaux de processeur de messages
Pour valider l'utilisation des journaux du processeur de messages:
<ph type="x-smartling-placeholder">Si vous êtes un utilisateur de cloud privé, vous pouvez utiliser les journaux du processeur de messages pour valider 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
- Effectuez une recherche pour voir s'il y a des erreurs
431
au cours d'une (si le problème s'est produit dans le passé) ou s'il existe des demandes échouent toujours avec431
. Vous pouvez utiliser les chaînes de recherche suivantes.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Les lignes de
system.log
se présentent comme suit: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,600
dans 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.RequestHeadersTooLarge
et les retours Code d'état431
avec le code d'erreurprotocol.http.TooBigHeaders
aux applications clientes.
Solution
<ph type="x-smartling-placeholder">
Corriger la taille
Option 1 [recommandée]: corrigez l'application cliente pour qu'elle n'envoie pas d'en-têtes de requête avec la taille totale dépasse la limite autorisée
<ph type="x-smartling-placeholder">- Analysez la raison pour laquelle le client spécifique envoie un en-tête de requête avec des la taille totale d'en-tête dépasse la limite autorisée définie dans Limites :
Si ce n'est pas souhaitable, modifiez votre application cliente afin qu'elle envoie En-têtes de requête dont la taille est inférieure à la limite autorisée.
Dans l'exemple présenté ci-dessus, vous pouvez résoudre le problème en transmettant l'en-tête long values 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 c'est souhaitable et si vous souhaitez envoyer un en-tête dépassant la limite autorisée, accédez à la l'option suivante.
CwC
Option 2 : Utiliser la propriété CwC pour augmenter la limite de lignes de requête
<ph type="x-smartling-placeholder">Apigee fournit un CwC qui lui permet d'augmenter la limite de taille de la ligne de requête. Pour en savoir plus, consultez <ph type="x-smartling-placeholder"></ph> Définir la limite de ligne de requête sur le processeur de messages
<ph type="x-smartling-placeholder">Limites
Apigee s'attend à ce que l'application cliente et le serveur backend n'envoient pas En-têtes de requête/réponse dont la taille est supérieure à la limite autorisée, telle qu'indiquée dans la documentation pour la limite de taille des en-têtes de requête/réponse dans Limites d'Apigee Edge
- Si vous êtes un utilisateur de cloud public, la limite maximale La taille des en-têtes des requêtes et des réponses correspond à celle indiquée dans le champ Taille des en-têtes de requête/réponse dans Limites d'Apigee Edge
- Si vous êtes un utilisateur du Private Cloud , il est possible que vous ayez modifié le nombre maximal par défaut pour la taille des en-têtes de requête et de réponse (même si cette pratique n'est pas recommandée). Vous pouvez déterminer la taille maximale d'en-tête de requête en suivant les instructions fournies dans Vérifier la limite actuelle
Comment vérifier la limite actuelle ?
<ph type="x-smartling-placeholder">
Cette section explique comment vérifier que la propriété HTTPRequest.headers.limit
a
a été mis à jour avec une nouvelle valeur sur les processeurs de messages.
- Sur le processeur de messages, recherchez la propriété
HTTPRequest.headers.limit
dans la/opt/apigee/edge-message-processor/conf
et vérifier consultez la valeur définie ci-dessous:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Voici un exemple de résultat de la commande ci-dessus:
/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.limit
a été définie avec la valeur25k
danshttp.properties
.Cela indique que la limite de taille de l'en-tête de requête configurée dans Apigee for Private 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 du
requête. Si la requête contient des en-têtes dont la taille totale dépasse la limite spécifiée,
Apigee génère 431 Request Header Fields Too Large
conformément au document RFC suivant :
spécifications:
Spécification |
---|
<ph type="x-smartling-placeholder"></ph> RFC 6585, section 5: 431 Request Header Fields Too Large |
Si vous avez encore besoin de l'aide de l'assistance Apigee, accédez à Obligation de 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:
- Nom de l'organisation
- Nom de l'environnement
- Nom du proxy d'API
- Exécutez la commande
curl
utilisée pour reproduire l'erreur431
. - 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 en échec
- Nom de l'organisation
- Nom de l'environnement
- Groupe de proxys d'API
- Fichier de suivi des requêtes API en échec
- Exécutez la commande
curl
utilisée pour reproduire l'erreur431
. 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 les valeurs réelles.
- Journaux système du processeur de messages
/opt/apigee/var/log/edge-message-processor/logs/system.log