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:
- Anfragezeile
- ( Satz von HTTP-Headern )
- [ 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
- 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 sie19 ASCII charactersenthält. Da dies innerhalb des zulässigen Limits in Apigee Edge liegt, wird die Anfrage ohne Fehler verarbeitet und Sie erhalten eine erfolgreiche Antwort. - Wenn Sie sich die
faultstringin 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:
- 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.TooBigLineund Statuscode414aus, wie unten dargestellt:
Die Informationen zum Fehlercode
protocol.http.TooBiglinewerden 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:
414 - Fehlerquelle:
apigee - Fehlercode:
protocol.http.TooBigLine. - Anfragelänge(Byte):
7244 (> 7KB)
- Statuscode:
- Wenn die Fehlerquelle den Wert
apigeeoderMPhat, der Fehlercode den Wertprotocol.http.TooBigLineund 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:
- Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffsprotokolle verwenden, um
die wichtigsten Informationen zu HTTP-
414Fehlern 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
414-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit414fehlschlagen. Wenn Sie
414Fehler finden, bei denen der X-Apigee-fault-code mit dem Wertprotocol.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.TooBigLineX-Apigee-fault-source policyAnfragelänge:
7244(7.244 KB > zulässiges Limit)
Ursache: Größe der Anfragenutzlast überschreitet das zulässige Limit
Diagnose
- 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.
- Wenn die Fehlerquelle den Wert
apigeeoderMPhat, bedeutet das, dass die von der Clientanwendung an Apigee gesendete Anfragengröße das zulässige Limit in Apigee Edge überschreitet. - 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
faultstringan. Dasfaultstringgibt 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:
- Prüfen Sie die Größe der in der Anfrage übergebenen URI.
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
qparamgröß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.
Prüfen Sie die Message Processor-Logs:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Suchen Sie nach
414-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit414fehlschlagen. Sie können die folgenden Suchstrings verwenden.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- 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,168in der obigen Fehlermeldung gibt an, dass die Größe der Anfrage-URI mehr als 7 KB beträgt. Daher löst Apigee Edge die Ausnahmecom.apigee.errors.http.user.RequestURITooLongaus und gibt den Statuscode414mit dem Fehlercodeprotocol.http.TooBiglinean 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
- Analysieren Sie, warum der bestimmte Client eine Anfrage-URI sendet, die das zulässige Limit überschreitet, wie unter Limits definiert.
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- 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.
- 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.
- 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.
- Suchen Sie auf dem Message Processor-Computer im Verzeichnis
/opt/apigee/edge-message-processor/confnach der PropertyHTTPRequest.line.limitund prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- Das Beispielergebnis des obigen Befehls sieht so aus:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
Beachten Sie in der obigen Beispielausgabe, dass die Property
HTTPRequest.line.limitinhttp.propertiesauf den Wert7kgesetzt 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 des414-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 des414-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