Champs d'en-tête de requête 431 trop volumineux - TooBigHeaders

<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:

  1. <ph type="x-smartling-placeholder"></ph> Connectez-vous à l'interface utilisateur d'Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
  2. Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.

  3. Accédez à Analyser > Surveillance des API > Examiner.
  4. Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
  5. Représentez le code d'erreur par rapport à l'heure.
  6. Sélectionnez une cellule avec le code d'erreur protocol.http.TooBigHeaders et code d'état 431 comme indiqué ci-dessous:

    ( Agrandir l'image)

  7. Vous verrez les informations sur le code d'erreur protocol.http.TooBigHeaders. comme indiqué ci-dessous:

    ( Agrandir l'image)

  8. Cliquez sur Afficher les journaux et développez la ligne correspondant à la requête ayant échoué:

    ( Agrandir l'image)

  9. 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)
  10. Si la source de la défaillance a la valeur apigee ou MP, le Le code d'erreur a la valeur protocol.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:

  1. 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.
  2. Vérifiez les journaux d'accès NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    :ORG, ENV et PORT# sont remplacés par des valeurs réelles.

  3. 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 avec 431
  4. Si vous trouvez des erreurs 431 avec le code X-Apigee-fault-code correspondant à la valeur de protocol.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 apigee ou MP, X-Apigee-fault-code a pour valeur protocol.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.

    <ph type="x-smartling-placeholder">

Cause: la taille des en-têtes de requête est supérieure à la limite autorisée

Diagnostic

  1. 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.
  2. Si la source de la défaillance a la valeur apigee ou MP, le code d'erreur a la valeur protocol.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.
  3. 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. Le faultstring 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:

    1. Vérifiez la taille des en-têtes transmis dans la requête.
    2. 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 et header3 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.

    1. Vérifiez les journaux du processeur de messages:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. 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 avec 431. Vous pouvez utiliser les chaînes de recherche suivantes.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. 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'exception com.apigee.errors.http.user.RequestHeadersTooLarge et les retours Code d'état 431 avec le code d'erreur protocol.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">
  1. 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 :
  2. 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>" }'
    
  3. 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

  1. 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
  2. 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.

  1. 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
    
  2. Voici un exemple de résultat de la commande ci-dessus:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
  3. Dans l'exemple de résultat ci-dessus, notez que la propriété HTTPRequest.headers.limit a été définie avec la valeur 25k dans http.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'erreur 431.
  • 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'erreur 431.
  • Journaux d'accès NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    :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