414 Request-URI Too Long – TooBigLine

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 :

  1. Ligne de requête
  2. ( Ensemble d'en-têtes HTTP )
  3. [ 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

  1. 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 contient 19 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.

  2. De même, si vous examinez le faultstring du 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 :

  1. Connectez-vous à l'interface utilisateur Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
  2. Basculez vers l'organisation dans laquelle vous souhaitez examiner le problème.

  3. Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Examiner).
  4. Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
  5. Tracez le code d'erreur par rapport au temps.
  6. Sélectionnez une cellule contenant le code d'erreur protocol.http.TooBigLine et le code d'état 414 comme indiqué ci-dessous :

    ( Agrandir l'image)

  7. Les informations sur le code d'erreur protocol.http.TooBigline s'affichent, comme indiqué ci-dessous :

    ( Agrandir l'image)

  8. Cliquez sur View logs (Afficher les journaux) et développez la ligne de la requête ayant échoué :

    ( Agrandir l'image)

  9. 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)
  10. Si la source de l'erreur a la valeur apigee ou MP, que le code d'erreur a la valeur protocol.http.TooBigLine et 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 :

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

  3. Recherchez les erreurs 414 sur une période spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec 414.
  4. Si vous trouvez des erreurs 414 avec le X-Apigee-fault-code correspondant à la valeur protocol.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.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 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.
  2. Si la source de l'erreur a la valeur apigee ou MP, 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.
  3. 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. Le faultstring indique 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 :

    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 à 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 qparam est 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.

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

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

    2. Recherchez les erreurs 414 sur une période spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec le code 414. Vous pouvez utiliser les chaînes de recherche suivantes.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Vous trouverez des lignes de system.log semblables à 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,168 du 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'exception com.apigee.errors.http.user.RequestURITooLong et renvoie le code d'état 414 avec le code d'erreur protocol.http.TooBigline aux 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

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

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

  1. Sur la machine du processeur de messages, recherchez la propriété HTTPRequest.line.limit dans le /opt/apigee/edge-message-processor/conf répertoire et vérifiez la valeur définie, comme indiqué ci-dessous :
    grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. 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
  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 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 curl complète utilisée pour reproduire l'erreur 414
  • 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 curl complète utilisée pour reproduire l'erreur 414
  • 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.

  • Journaux système du processeur de messages /opt/apigee/var/log/edge-message-processor/logs/system.log