414 Request-URI Too Long – TooBigLine

<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 un code d'état HTTP 414 Request-URI Too Long avec 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

Le message d'erreur suivant peut également s'afficher:

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Notez que faultstring dans le message d'erreur ci-dessus contient la limite autorisée. pour la ligne de demande dans Apigee Edge, soit 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 dépasse la limite autorisée dans Apigee Edge.

Avant d'examiner les causes possibles de cette erreur, voyons quelle est la ligne de requête et comment vérifier sa taille.

Comprendre la ligne de requête

Une requête HTTP typique se compose de trois parties:

  1. <ph type="x-smartling-placeholder"></ph> Ligne de demande
  2. ( Ensemble d'en-têtes HTTP )
  3. [ Corps ]

La ligne de requête se compose de trois parties, comme indiqué ci-dessous.

Request-Line = <Method> <Request-URI> <HTTP-Version>

Lorsqu'une requête HTTP est effectuée par l'application cliente vers un serveur, la première ligne qui va à le serveur contient l'élément Request-Line décrit ci-dessus. Elle est suivie de en-têtes et corps/charge utile de la requête.

La capture d'écran suivante montre une requête curl classique, la classe Request (avec la ligne de requête) et la partie Réponse.

Comprendre la taille de la ligne de requête

  1. Dans l'exemple présenté ci-dessus, la ligne de début (première ligne) de la requête, également appelé Request-Line, est le suivant:
    GET /test/ HTTP/1.1
    

    La taille de la ligne de demande est ~19 bytes, car elle contient 19 ASCII characters Puisqu'il s'agit d'un emplacement limite autorisée dans Apigee Edge, la requête est traitée sans erreur. et vous obtenez une réponse positive.

  2. De même, si vous regardez faultstring dans Le message d'erreur ci-dessus 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 Taille de l'URI de la requête envoyée par l'application cliente dans le cadre de l'appel envoyée à Apigee Edge est supérieure à 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.TooBigLine et code d'état 414 comme indiqué ci-dessous:

    ( Agrandir l'image)

  7. Vous verrez les informations sur le code d'erreur protocol.http.TooBigline. 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:414
    • Source de l'erreur:apigee
    • Code d'erreur:protocol.http.TooBigLine.
    • Longueur de la requête(octets) : 7244 (> 7KB)
  10. Si la source de la défaillance a la valeur apigee ou MP, le Le code d'erreur a la valeur protocol.http.TooBigLine et Request-Length est supérieure à 7 Ko, ce qui indique que la requête HTTP du client possède un URI de requête supérieur à limite autorisée dans Apigee.

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 414.
  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 414 pendant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent encore avec 414
  4. Si vous trouvez des erreurs 414 avec le code X-Apigee-fault-code correspondant à la valeur de protocol.http.TooBigLine, 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.TooBigLine
    X-Apigee-fault-source policy

    Notez 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

  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 de surveillance des API, de l'outil Trace ou de NGINX Access, comme expliqué dans Étapes de diagnostic courantes.
  2. Si la source de la défaillance a la valeur apigee ou MP, alors 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 de la ligne de demande a dépassé la limite autorisée de 7 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 de la ligne de requête dépassait la limite autorisée de 7 Ko.

    Exemple de message d'erreur:

    "faultstring":"request line size exceeding 7,168"
    

    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 de l'URI transmis dans la requête.
    2. Si vous constatez que la taille de l'URI est supérieure à limite autorisée dans Apigee Edge, celle-ci 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 dépasse 7 Ko, c'est-à-dire qu'il contient plus de 7 000 caractères ASCII.

      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 vérifier si la taille de la ligne de demande 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 existe des erreurs 414 au cours d'une (si le problème s'est produit dans le passé) ou s'il existe des demandes échouent toujours avec 414. Vous pouvez utiliser les chaînes de recherche suivantes.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Les lignes de system.log se présentent comme 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 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'exception com.apigee.errors.http.user.RequestURITooLong et les retours Code d'état 414 avec le code d'erreur protocol.http.TooBigline 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'URI de requête supérieure à la limite autorisée

<ph type="x-smartling-placeholder">
  1. Analysez la raison pour laquelle un client spécifique envoie une taille d'URI de la demande supérieure à maximale autorisée, telle que définie dans la section Limites.
  2. Si ce n'est pas souhaitable, modifiez votre application cliente de sorte qu'elle envoie l'URI de la requête. inférieure à la limite autorisée.

    Dans l'exemple décrit ci-dessus, vous pouvez résoudre le problème en transmettant la requête longue dans le corps/la charge utile de la requête, au lieu de le transmettre dans le cadre du comme indiqué ci-dessous:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Si c'est souhaitable et que vous souhaitez envoyer un URI dont la taille dépasse la limite autorisée, accédez à la les options suivantes.

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 de lignes de requête/réponse dont la taille dépasse la limite autorisée, telle qu'indiquée dans le nombre maximal de lignes de requêtes/réponses. dans les limites d'Apigee Edge.

  1. Si vous êtes un utilisateur de cloud public, la limite maximale pour les ressources La taille de la ligne de réponse est telle qu'indiquée dans le champ Request/Response-Line size (Taille de la ligne 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 de la requête et de la ligne de réponse (même s'il ne s'agit pas d'une pratique recommandée). Vous pouvez déterminer la limite de taille maximale pour la ligne de demande en suivant les instructions fournies dans l'article 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.line.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.line.limit dans la /opt/apigee/edge-message-processor/conf et vérifier consultez la valeur définie ci-dessous:
    grep -ri "HTTPRequest.line.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.line.limit=7k
    
  3. Dans l'exemple de résultat ci-dessus, notez que la propriété HTTPRequest.line.limit a été définie avec la valeur 7k dans http.properties.

    Cela indique que la limite de taille de ligne de requête configurée dans Apigee pour les est de 7 Ko.

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 414.
  • 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 414.
  • 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