414 Anfrage-URI zu lang – TooBigLine

Sie lesen gerade die Apigee Edge -Dokumentation.
Zur Apigee X -Dokumentation.
info

Symptom

Die Clientanwendung erhält den HTTP-Statuscode 414 Request-URI Too Long mit Fehlercode protocol.http.TooBigLine als Antwort auf API-Aufrufe.

Fehlermeldung

Die Clientanwendung erhält den folgenden Antwortcode:

HTTP/1.1 414 Request-URI Too Long

Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Beachten Sie, dass das faultstring in der obigen Fehlermeldung das zulässige Limit für die Anfragezeile in Apigee Edge enthält, nämlich 7168 bytes (7 KB).

Mögliche Ursachen

Dieser Fehler tritt auf, wenn die Größe der Anfragezeile, die von der Clientanwendung als Teil der HTTP-Anfrage an Apigee Edge gesendet wird, das zulässige Limit in Apigee Edge überschreitet.

Bevor wir uns die möglichen Ursachen für diesen Fehler ansehen, wollen wir verstehen, was die Anfragezeile bedeutet und wie Sie ihre Größe prüfen.

Anfragezeile

Eine typische HTTP-Anfrage besteht aus drei Teilen:

  1. Anfragezeile
  2. ( Satz von HTTP-Headern )
  3. [ Body ]

Die Anfragezeile besteht aus drei Teilen, wie unten dargestellt.

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

Wenn eine HTTP-Anfrage von der Clientanwendung an einen Server gesendet wird, enthält die erste Zeile, die an den Server gesendet wird, die Anfragezeile oben beschrieben. Danach folgen die Header und der Anfragetext bzw. die Nutzlast.

Der folgende Screenshot zeigt eine typische curl Anfrage, den Anfrage Teil (zusammen mit der Anfragezeile) und den Antwort Teil.

Größe der Anfragezeile

  1. Im oben beschriebenen Beispiel ist die Startzeile (erste Zeile) in der Anfrage, auch Anfragezeile genannt, wie folgt:
    GET /test/ HTTP/1.1

    Die Größe der Anfragezeile beträgt ~19 bytes, da sie 19 ASCII characters enthält. Da dies innerhalb des zulässigen Limits in Apigee Edge liegt, wird die Anfrage ohne Fehler verarbeitet und Sie erhalten eine erfolgreiche Antwort.

  2. Wenn Sie sich die faultstring in der Fehlermeldung ansehen, enthält sie "request line size exceeding 7,168". Das bedeutet,dass die Anfragezeile in der HTTP-Anfrage des Clients 7.168 Byte überschritten hat.

Hier sind die möglichen Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Größe der Anfragenutzlast überschreitet das zulässige Limit Die Größe der Anfrage-URI, die von der Clientanwendung als Teil der HTTP Anfrage an Apigee Edge gesendet wird, überschreitet das zulässige Limit in Apigee Edge. Nutzer von Edge Public und Private Cloud

Allgemeine Diagnoseschritte

Verwenden Sie eines der folgenden Tools/Verfahren, um diesen Fehler zu diagnostizieren:

API-Monitoring

So diagnostizieren Sie den Fehler mit dem API-Monitoring:

  1. Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einer geeigneten Rolle an.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Rufen Sie die Seite Analysieren > API-Monitoring > Untersuchen auf.
  4. Wählen Sie den Zeitraum aus, in dem die Fehler aufgetreten sind.
  5. Stellen Sie Fehlercode im Verhältnis zu Zeit dar.
  6. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.TooBigLine und Statuscode 414 aus, wie unten dargestellt:

    ( größeres Bild ansehen)

  7. Die Informationen zum Fehlercode protocol.http.TooBigline werden wie unten dargestellt angezeigt:

    ( größeres Bild ansehen)

  8. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage:

    ( größeres Bild ansehen)

  9. Notieren Sie sich im Fenster Logs die folgenden Details:

    • Statuscode:414
    • Fehlerquelle:apigee
    • Fehlercode:protocol.http.TooBigLine.
    • Anfragelänge(Byte): 7244 (> 7KB)
  10. Wenn die Fehlerquelle den Wert apigee oder MP hat, der Fehlercode den Wert protocol.http.TooBigLine und die Anfragelänge mehr als 7 KB beträgt, bedeutet das, dass die HTTP-Anfrage des Clients eine Anfrage-URI hat, die das zulässige Limit in Apigee überschreitet.

Trace-Tool

NGINX

So diagnostizieren Sie den Fehler mit NGINX-Zugriffsprotokollen:

  1. Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffsprotokolle verwenden, um die wichtigsten Informationen zu HTTP-414 Fehlern zu ermitteln.
  2. Prüfen Sie die NGINX-Zugriffsprotokolle:

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

    Dabei werden: ORG, ENV, und PORT# durch tatsächliche Werte ersetzt.

  3. Suchen Sie nach 414-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit 414 fehlschlagen.
  4. Wenn Sie 414 Fehler finden, bei denen der X-Apigee-fault-code mit dem Wert protocol.http.TooBigLine übereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.

    Der obige Beispiel-Eintrag aus dem NGINX-Zugriffsprotokoll hat die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-source:

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source policy

    Anfragelänge:7244 (7.244 KB > zulässiges Limit)

Ursache: Größe der Anfragenutzlast überschreitet das zulässige Limit

Diagnose

  1. Ermitteln Sie den Fehlercode, die Fehlerquelle und die Größe der Anfragelänge für den beobachteten Fehler mit dem API-Monitoring, dem Trace-Tool oder den NGINX-Zugriffsprotokollen, wie unter Allgemeine Diagnoseschritte beschrieben.
  2. Wenn die Fehlerquelle den Wert apigee oder MP hat, bedeutet das, dass die von der Clientanwendung an Apigee gesendete Anfragengröße das zulässige Limit in Apigee Edge überschreitet.
  3. Sie können mit einer der folgenden Methoden prüfen, ob die Größe der Anfragezeile das zulässige Limit von 7 KB überschritten hat:

    Fehlermeldung

    So prüfen Sie die Größe mit der Fehlermeldung:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung haben, die Sie von Apigee Edge erhalten haben, dann sehen Sie sich die faultstring an. Das faultstring gibt an, dass die Größe der Anfragezeile das zulässige Limit von 7 KB überschritten hat.

    Beispiel für eine Fehlermeldung :

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

    Tatsächliche Anfrage

    So prüfen Sie die Größe mit der tatsächlichen Anfrage:

    Wenn Sie Zugriff auf die tatsächliche Anfrage der Clientanwendung haben, führen Sie die folgenden Schritte aus:

    1. Prüfen Sie die Größe der in der Anfrage übergebenen URI.
    2. Wenn die Größe der URI das zulässige Limit in Apigee Edge überschreitet, ist das die Ursache des Problems.

      Beispielanfrage :

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      Im obigen Fall ist der Wert des Abfrageparameters qparam größer als 7 KB, d. h., er enthält mehr als 7.000 ASCII-Zeichen.

      Wenn Sie einen anderen Client verwenden, können Sie die Clientprotokolle prüfen und die Größe der Anfragezeile ermitteln, die an Apigee Edge gesendet wird.

    Message Processor-Logs

    So prüfen Sie die Größe mit Message Processor-Logs:

    Wenn Sie Private Cloud-Nutzer sind, können Sie Message Processor-Logs verwenden, um zu prüfen, ob die Größe der Anfragezeile das zulässige Limit in Apigee Edge überschritten hat.

    1. Prüfen Sie die Message Processor-Logs:

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

    2. Suchen Sie nach 414-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit 414 fehlschlagen. Sie können die folgenden Suchstrings verwenden.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Sie finden Zeilen aus system.log, die so aussehen:
      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)

      Der Text message = request line size exceeding 7,168 in der obigen Fehlermeldung gibt an, dass die Größe der Anfrage-URI mehr als 7 KB beträgt. Daher löst Apigee Edge die Ausnahme com.apigee.errors.http.user.RequestURITooLong aus und gibt den Statuscode 414 mit dem Fehlercode protocol.http.TooBigline an die Clientanwendungen zurück.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Clientanwendung so korrigieren, dass sie keine Anfrage-URI sendet, die das zulässige Limit überschreitet

  1. Analysieren Sie, warum der bestimmte Client eine Anfrage-URI sendet, die das zulässige Limit überschreitet, wie unter Limits definiert.
  2. Wenn das nicht gewünscht ist, ändern Sie Ihre Clientanwendung so, dass sie eine Anfrage-URI sendet, die das zulässige Limit nicht überschreitet.

    Im oben beschriebenen Beispiel können Sie das Problem beheben, indem Sie den langen Abfrage parameter als Teil des Anfragetexts bzw. der Nutzlast übergeben, anstatt ihn als Teil der Anfrage-URL zu übergeben, wie unten dargestellt:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Wenn das gewünscht ist und Sie eine URI senden möchten, die das zulässige Limit überschreitet, sehen Sie sich die nächsten Optionen an.

CwC

Option 2 : CwC-Property verwenden, um das Limit für die Anfragezeile zu erhöhen

Apigee bietet eine CwC-Property, mit der das Limit für die Größe der Anfragezeile erhöht werden kann. Weitere Informationen finden Sie unter Limit für die Anfragezeile auf dem Message Processor festlegen

Limits

Apigee erwartet, dass die Clientanwendung und der Backend-Server keine Anfrage-/Antwortzeilen senden, deren Größe das zulässige Limit überschreitet, wie unter Limit für Anfrage-/Antwortzeile in Apigee Edge-Limits dokumentiert.

  1. Wenn Sie Public Cloud-Nutzer sind, gilt das maximale Limit für die Größe der Anfrage- und Antwortzeile, wie unter Größe der Anfrage-/Antwortzeile in Apigee Edge-Limits dokumentiert.
  2. Wenn Sie Private Cloud-Nutzer sind, haben Sie möglicherweise das Standardlimit für die Größe der Anfrage- und Antwortzeile geändert (obwohl das nicht empfohlen wird). Sie können das maximale Limit für die Größe der Anfragezeile ermitteln, indem Sie der Anleitung unter Aktuelles Limit prüfen folgen.

Wie prüfe ich das aktuelle Limit?

In diesem Abschnitt wird erläutert, wie Sie prüfen, ob die Property HTTPRequest.line.limit auf den Message Processors mit einem neuen Wert aktualisiert wurde.

  1. Suchen Sie auf dem Message Processor-Computer im Verzeichnis /opt/apigee/edge-message-processor/conf nach der Property HTTPRequest.line.limit und prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:
    grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. Das Beispielergebnis des obigen Befehls sieht so aus:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
  3. Beachten Sie in der obigen Beispielausgabe, dass die Property HTTPRequest.line.limit in http.properties auf den Wert 7k gesetzt wurde.

    Das bedeutet, dass das Limit für die Größe der Anfragezeile, das in Apigee für Private Cloud konfiguriert ist, 7 KB. beträgt.

Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.

Erfassen von Diagnoseinformationen erforderlich

Erfassen Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:

Wenn Sie Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Name der Organisation
  • Name der Umgebung
  • Name des API-Proxys
  • Vollständiger curl-Befehl, der zum Reproduzieren des 414-Fehlers verwendet wurde
  • Trace-Datei für die API-Anfragen

Wenn Sie Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Bundle
  • Trace-Datei für die fehlgeschlagenen API-Anfragen
  • Vollständiger curl-Befehl, der zum Reproduzieren des 414-Fehlers verwendet wurde
  • NGINX-Zugriffsprotokolle /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dabei werden: ORG, ENV und PORT# durch tatsächliche Werte ersetzt.

  • Message Processor-Systemprotokolle /opt/apigee/var/log/edge-message-processor/logs/system.log