431 Anfrageheader-Felder zu groß – TooBigHeaders

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

Symptom

Die Clientanwendung erhält den HTTP-Statuscode 431 Request Header Fields Too Large mit dem Fehlercode protocol.http.TooBigHeaders als Antwort auf API Aufrufe.

Fehlermeldung

Die Clientanwendung erhält den folgenden Antwortcode:

HTTP/1.1 431 Request Header Fields Too Large

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

{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Mögliche Ursachen

Dieser Fehler tritt auf, wenn die Gesamtgröße aller Anfrageheader, die von der Clientanwendung als Teil der HTTP-Anfrage an Apigee Edge gesendet werden, das in Apigee Edge zulässige Limit gemäß RFC 6585, Abschnitt 5: 431 Request Header Fields Too Large überschreitet.

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Die Größe der Anfrageheader überschreitet das zulässige Limit Die Gesamtgröße aller Header, die von der Clientanwendung als Teil der HTTP-Anfrage an Apigee Edge gesendet werden, ist größer als das in Apigee Edge zulässige Limit. 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.TooBigHeaders und Statuscode 431 aus, wie unten dargestellt:

    ( größeres Bild ansehen)

  7. Die Informationen zum Fehlercode protocol.http.TooBigHeaders 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:431
    • Fehlerquelle:apigee
    • Fehlercode:protocol.http.TooBigHeaders.
    • Anfragelänge(Byte): 32150 (> 25 KB)
  10. Wenn die Fehlerquelle den Wert apigee oder MP hat, der Fehlercode den Wert protocol.http.TooBigHeaders und die Anfragelänge mehr als 25 KB beträgt, ist die Gesamtgröße aller Anfrageheader, die von der Clientanwendung als Teil der HTTP-Anfrage gesendet werden, größer als das in Apigee zulässige Limit.

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-431-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 431-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit 431 fehlschlagen.
  4. Wenn Sie 431-Fehler finden, bei denen der X-Apigee-fault-code mit dem Wert protocol.http.TooBigHeaders übereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.

    Der obige Beispieleeintrag 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.TooBigHeaders
    X-Apigee-fault-source MP

    Anfragelänge 40159 (40 KB sind mehr als 25 KB, das zulässige Limit für Anfrageheader in Apigee Edge)

    Im obigen Beispielprotokolleintrag hat die X-Apigee-fault-source den Wert apigee oder MP, der X-Apigee-fault-code den Wert protocol.http.TooBigHeaders und die Anfragelänge 40 KB, was mehr als das in Apigee zulässige Limit von 25 KB ist. Das zeigt deutlich, dass die Gesamtgröße aller Anfrageheader, die von der Clientanwendung als Teil der HTTP Anfrage gesendet werden, das zulässige Limit von 25 KB in Apigee Edge überschritten hat.

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

Diagnose

  1. Ermitteln Sie den Fehlercode, die Fehlerquelle und die Anfragelänge für den beobachteten Fehler mithilfe des API-Monitorings oder der NGINX-Zugriffsprotokolle, wie unter Allgemeine Diagnoseschritte beschrieben.
  2. Wenn die Fehlerquelle den Wert apigee oder MP hat, der Fehlercode den Wert protocol.http.TooBigHeaders und die Anfragelänge mehr als 25 KB beträgt, ist die von der Clientanwendung an Apigee gesendete Anfragengröße größer als das zulässige Limit in Apigee Edge.
  3. Sie können mit einer der folgenden Methoden prüfen, ob die Größe der Anfrageheader das zulässige Limit von 25 KB überschritten hat:

    Fehlermeldung

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

    Wenn Sie Zugriff auf die vollständige Fehlermeldung haben, die Sie von Apigee Edge erhalten haben, dann sehen Sie sich den faultstring an. Der faultstring gibt an, dass die Gesamtgröße der Anfrageheader das zulässige Limit von 25 KB überschritten hat.

    Beispielfehlermeldung :

    "faultstring":"request headers size exceeding 25,600"

    Tatsächliche Anfrage

    So prüfen Sie die Größe der Anfrageheader anhand 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 Header.
    2. Wenn die Gesamtgröße der Header das in Apigee Edge zulässige Limit überschreitet, ist dies die Ursache des Problems.

      Beispielanfrage :

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

      Im obigen Fall ist die Gesamtgröße der Header header0, header1, header2, und header3 größer als 25 KB. Das heißt, sie enthält mehr als 25.000 ASCII-Zeichen (Byte).

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

    Message Processor-Protokolle

    So prüfen Sie die Größe der Anfrageheader anhand der Message Processor-Protokolle:

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

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

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

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

      Der Text message = request headers size exceeding 25,600 in der obigen Fehlermeldung gibt an, dass die Gesamtgröße der Anfrageheader mehr als 25 KB beträgt. Daher löst Apigee Edge die Ausnahme com.apigee.errors.http.user.RequestHeadersTooLarge aus und gibt den Statuscode 431 mit dem Fehlercode protocol.http.TooBigHeaders an die Clientanwendungen zurück.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Korrigieren Sie die Clientanwendung so, dass sie keine Anfrageheader mit Gesamtgröße sendet, die das zulässige Limit überschreitet

  1. Analysieren Sie, warum der bestimmte Client Anfrageheader mit einer großen Größe sendet, wodurch die Gesamtgröße der Header das zulässige Limit überschreitet, wie unter Limits definiert.
  2. Wenn dies nicht gewünscht ist, ändern Sie Ihre Clientanwendung so, dass sie Anfrageheader mit einer Größe sendet, die das zulässige Limit nicht überschreitet.

    Im oben beschriebenen Beispiel können Sie das Problem beheben, indem Sie den Parameter für lange Header Werte als Teil des Anfragetexts/der Nutzlast übergeben:

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. Wenn dies gewünscht ist und Sie einen Header senden möchten, der das zulässige Limit überschreitet, fahren Sie mit der nächsten Option fort.

CwC

Option 2 : Verwenden Sie die CwC-Property, 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-/Antwortheader senden, deren Größe das zulässige Limit überschreitet, wie unter Limit für die Größe von Anfrage-/Antwortheadern in Apigee Edge-Limits dokumentiert.

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

Aktuelles Limit prüfen

In diesem Abschnitt wird erläutert, wie Sie prüfen, ob die Property HTTPRequest.headers.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.headers.limit und prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:
    grep -ri "HTTPRequest.headers.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.headers.limit=25k
  3. Beachten Sie in der obigen Beispielausgabe, dass die Property HTTPRequest.headers.limit in http.properties auf den Wert 25k festgelegt wurde.

    Das bedeutet, dass das in Apigee für Private Cloud konfigurierte Limit für die Größe von Anfrageheadern 25 KB beträgt.

Spezifikation

Apigee Edge erwartet, dass die Clientanwendung keine Header mit großer Größe als Teil der Anfrage sendet. Wenn die Anfrage Header enthält, deren Gesamtgröße das angegebene Limit überschreitet, gibt Apigee gemäß den folgenden RFC Spezifikationen 431 Request Header Fields Too Large aus:

Spezifikation
RFC 6585, Abschnitt 5: 431 Anfrage-Headerfelder zu groß

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