431 Anfrageheader-Felder zu groß – TooBigHeaders

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Symptom

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

Fehlermeldung

Die Clientanwendung ruft den folgenden Antwortcode ab:

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 wurden, das zulässige Limit in Apigee Edge gemäß RFC 6585, Abschnitt 5: 431 Anfrageheaderfelder zu groß ü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 zulässige Limit in Apigee Edge. Nutzer von Edge Public und Private Cloud

Allgemeine Diagnoseschritte

Verwenden Sie eines der folgenden Tools oder Methoden, um diesen Fehler zu diagnostizieren:

API-Monitoring

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

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

  3. Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Stellen Sie den Fehlercode der Zeit gegenüber.
  6. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.TooBigHeaders und dem Statuscode 431 aus, wie unten dargestellt:

    ( größeres Bild ansehen)

  7. Sie sehen die Informationen zum Fehlercode protocol.http.TooBigHeaders wie unten dargestellt:

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

Trace-Tool

NGINX

So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:

  1. Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-431-Fehlern ermitteln.
  2. Prüfen Sie die NGINX-Zugriffslogs:

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

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

  3. Suchen Sie nach 431-Fehlern innerhalb eines bestimmten Zeitraums (ob das Problem in der Vergangenheit aufgetreten ist) oder ob es immer noch Anfragen mit 431 gibt, die fehlschlagen.
  4. Wenn Sie 431-Fehler mit dem X-Apigee-fault-code finden, der dem Wert von X-Apigee-fault-code entspricht, ermitteln Sie den Wert von X-Apigee-fault-code .

    Der obige Beispieleintrag aus dem NGINX-Zugriffslog enthält die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-code :

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    Beachten Sie die Anfragelänge: 40159 (40 KB ist größer als 25 KB, das zulässige Limit für Anfrageheader in Apigee Edge)

    Im obigen Beispiel-Logeintrag hat die X-Apigee-fault-source den Wert apigee oder MP, der X-Apigee-fault-source den Wert protocol.http.TooBigHeaders und die X-Apigee-fault-source beträgt 40 KB, was das zulässige Limit von 25 KB in Apigee überschreitet. Dies zeigt eindeutig an, dass die Gesamtgröße aller Anfrageheader, die von der Clientanwendung als Teil der HTTP-Anfrage gesendet werden, die zulässige Grenze von 25 KB in Apigee Edge überschritten hat.

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

Diagnose

  1. Bestimmen Sie den Fehlercode, die Fehlerquelle und die Anfragelänge für den Fehler, der mithilfe von API-Monitoring- oder NGINX-Zugriffslogs beobachtet wird, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn die Fehlerquelle den Wert apigee oder MP hat, der Fehlercode den Wert protocol.http.TooBigHeaders hat und die Anfragelänge mehr als 25 KB beträgt, bedeutet dies, dass die von der Clientanwendung an Apigee gesendete Anfragegröße größer als die zulässige Grenze in Apigee Edge ist.
  3. Mit einer der folgenden Methoden können Sie prüfen, ob die Größe der Anfrageheader die maximal zulässige Größe von 25 KB überschreitet:

    Fehlermeldung

    So validieren Sie mithilfe der Fehlermeldung:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, lesen Sie die faultstring. Der faultstring gibt an, dass die Gesamtgröße der Anfrageheader die maximal zulässige Größe von 25 KB überschritten hat.

    Beispiel für eine Fehlermeldung:

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

    Tatsächliche Anfrage

    So validieren Sie mithilfe der tatsächlichen Anfrage:

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

    1. Überprüfen Sie die Größe der Header, die in der Anfrage übergeben wurden.
    2. Wenn Sie feststellen, dass die Gesamtgröße der Header das zulässige Limit in Apigee Edge überschreitet, dann 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 Beispiel oben 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 Clientlogs überprüfen und versuchen, die Größe der Anfragezeile zu ermitteln, die an Apigee Edge gesendet wird.

    Message Processor-Protokolle

    So validieren Sie mithilfe von Message Processor-Protokollen:

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

    1. Prüfen Sie die Protokolle des Nachrichtenverarbeiters:

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

    2. Suchen Sie, ob während eines bestimmten Zeitraums 431-Fehler aufgetreten sind (ob das Problem in der Vergangenheit aufgetreten ist) oder ob Anfragen mit 431 immer noch fehlschlagen. Sie können die folgenden Suchzeichenfolgen verwenden.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Die Zeilen von system.log sehen in etwa so aus:
      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 gibt Apigee Edge die Ausnahme com.apigee.errors.http.user.RequestHeadersTooLarge aus und gibt den Statuscode 431 mit dem Fehlercode protocol.http.TooBigHeaders an Clientanwendungen zurück.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Korrigieren Sie, dass die Clientanwendung keine Anfrageheader mit einer größeren Gesamtgröße als das zulässige Limit sendet

  1. Analysieren Sie den Grund für den jeweiligen Client, den Anfrageheader sehr groß zu senden, wodurch die Gesamtgröße des Headers die unter Limits definierte zulässige Grenze überschreitet.
  2. Wenn dies nicht gewünscht ist, ändern Sie Ihre Clientanwendung so, dass sie Anfrageheader mit einer Größe sendet, die unter dem zulässigen Limit liegt.

    Im oben beschriebenen Beispiel können Sie das Problem beheben, indem Sie den Parameter „long header values“ 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 mehr als das zulässige Limit senden möchten, fahren Sie mit der nächsten Option fort.

CwC

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

Apigee bietet ein Attribut CwC, mit dem Sie die maximale Größe der Anfragezeile erhöhen können. Weitere Informationen finden Sie unter Limit für Anfragezeilen im Message Processor festlegen.

Einschränkungen

Apigee erwartet, dass die Clientanwendung und der Back-End-Server keine Anfrage-/Antwortheader senden, deren Größe über dem zulässigen Grenzwert liegt, wie in Apigee Edge-Limits für Anfrage-/Antwortheader angegeben.

  1. Wenn Sie ein Nutzer der öffentlichen Cloud sind, finden Sie die maximale Größe für die Größe von Anfrage- und Antwortheadern unter Größe des Anfrage-/Antwortheaders unter Limits für Apigee Edge.
  2. Wenn Sie Private Cloud-Nutzer sind, haben Sie möglicherweise die maximale Standardgröße für die Größe von Anfrage- und Antwortheadern geändert (obwohl es nicht empfohlen wird). Sie können die maximale Größe des Anfrageheaders anhand der Anleitung unter Aktuelle Begrenzung prüfen ermitteln.

Wie überprüfe ich das aktuelle Limit?

In diesem Abschnitt wird erläutert, wie Sie überprüfen können, ob die Eigenschaft HTTPRequest.headers.limit mit einem neuen Wert auf den Message Processors aktualisiert wurde.

  1. Suchen Sie auf dem Message Processor-Computer im Verzeichnis /opt/apigee/edge-message-processor/conf nach dem Attribut HTTPRequest.headers.limit und prüfen Sie, welcher Wert wie unten dargestellt festgelegt wurde:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Das Ergebnis des obigen Befehls sieht so aus:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
  3. In der obigen Beispielausgabe wurde das Attribut HTTPRequest.headers.limit auf den Wert 25k in http.properties festgelegt.

    Dies weist darauf hin, dass das Limit für die in Apigee for Private Cloud konfigurierte Größe des Anfrageheaders 25 KB beträgt.

Spezifikation

Apigee Edge erwartet, dass die Clientanwendung keine großen Header als Teil der Anfrage sendet. Wenn die Anfrage Header mit einer Gesamtgröße über dem angegebenen Limit enthält, gibt Apigee gemäß den folgenden RFC-Spezifikationen 431 Request Header Fields Too Large aus:

Spezifikation
RFC 6585, Abschnitt 5: 431 Anfrageheaderfelder zu groß

Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, lesen Sie Diagnoseinformationen müssen erfasst werden.

Erfassen von Diagnoseinformationen erforderlich

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

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

  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Name
  • Führen Sie den Befehl curl aus, mit dem der Fehler 431 reproduziert wurde
  • Ablaufverfolgungsdatei für die API-Anfragen

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

  • Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Bundle
  • Ablaufverfolgungsdatei für fehlgeschlagenen API-Anfragen
  • Führen Sie den Befehl curl aus, mit dem der Fehler 431 reproduziert wurde
  • NGINX-Zugriffslogs /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

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