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:
- Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einer geeigneten Rolle an.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Rufen Sie die Seite Analysieren > API-Monitoring > Untersuchen auf.
- Wählen Sie den Zeitraum aus, in dem die Fehler aufgetreten sind.
- Stellen Sie Fehlercode im Verhältnis zu Zeit dar.
- Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.TooBigHeadersund Statuscode431aus, wie unten dargestellt:
Die Informationen zum Fehlercode
protocol.http.TooBigHeaderswerden wie unten dargestellt angezeigt:
Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage:
Notieren Sie sich im Fenster Logs die folgenden Details:
- Statuscode:
431 - Fehlerquelle:
apigee - Fehlercode:
protocol.http.TooBigHeaders. - Anfragelänge(Byte):
32150 (> 25 KB)
- Statuscode:
- Wenn die Fehlerquelle den Wert
apigeeoderMPhat, der Fehlercode den Wertprotocol.http.TooBigHeadersund 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:
- Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffsprotokolle verwenden, um
die wichtigsten Informationen zu HTTP-
431-Fehlern zu ermitteln. Prüfen Sie die NGINX-Zugriffsprotokolle:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV, und PORT# durch tatsächliche Werte ersetzt.
- Suchen Sie nach
431-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit431fehlschlagen. Wenn Sie
431-Fehler finden, bei denen der X-Apigee-fault-code mit dem Wertprotocol.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.TooBigHeadersX-Apigee-fault-source MPAnfragelä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
apigeeoderMP, der X-Apigee-fault-code den Wertprotocol.http.TooBigHeadersund 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
- 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.
- Wenn die Fehlerquelle den Wert
apigeeoderMPhat, der Fehlercode den Wertprotocol.http.TooBigHeadersund 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. - 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
faultstringan. Derfaultstringgibt 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:
- Prüfen Sie die Größe der in der Anfrage übergebenen Header.
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, undheader3größ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.
Prüfen Sie die Message Processor-Protokolle:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Suchen Sie nach
431-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit431fehlschlagen. Sie können die folgenden Suchstrings verwenden.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- 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,600in der obigen Fehlermeldung gibt an, dass die Gesamtgröße der Anfrageheader mehr als 25 KB beträgt. Daher löst Apigee Edge die Ausnahmecom.apigee.errors.http.user.RequestHeadersTooLargeaus und gibt den Statuscode431mit dem Fehlercodeprotocol.http.TooBigHeadersan 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
- 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.
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>" }'- 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.
- 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.
- 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.
- Suchen Sie auf dem Message Processor-Computer im Verzeichnis
/opt/apigee/edge-message-processor/confnach der PropertyHTTPRequest.headers.limitund prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Das Beispielergebnis des obigen Befehls sieht so aus:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
Beachten Sie in der obigen Beispielausgabe, dass die Property
HTTPRequest.headers.limitinhttp.propertiesauf den Wert25kfestgelegt 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 des431-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 des431-Fehlers verwendet wurde NGINX-Zugriffsprotokolle
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV und PORT# durch tatsächliche Werte ersetzt.
- Message Processor-Systemprotokolle
/opt/apigee/var/log/edge-message-processor/logs/system.log