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 502 Bad Gateway
mit dem Fehlercode protocol.http.TooBigLine
.
Fehlermeldung
Die Clientanwendung ruft den folgenden Antwortcode ab:
HTTP/1.1 502 Bad Gateway
Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:
{ "fault":{ "faultstring":"response line size exceeding 2,048", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
Mögliche Ursachen
Dieser Fehler tritt auf, wenn die Größe Response-Line, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet wird, größer als das maximal zulässige Limit in Apigee Edge ist.
Bevor wir uns die möglichen Ursachen für diesen Fehler ansehen, erfahren Sie, was die Antwortzeile bedeutet und wie Sie ihre Größe prüfen können.
Erläuterung der Antwortzeile
Eine typische HTTP-Antwort besteht aus drei Teilen:
- Status-Line (in Apigee als Response-Line bezeichnet)
- ( Gruppe von HTTP-Headern )
- [Text ]
Die Response-Line besteht aus drei Teilen: Protokollversion, gefolgt von einem numerischen Statuscode und dem zugehörigen entsprechenden Text, wie unten dargestellt:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Wenn von der Ziel-/Back-End-Serveranwendung eine HTTP-Antwort gesendet wird, stellt die erste gesendete Zeile die oben beschriebene Antwortzeile dar. Darauf folgen die Header und der Antworttext/die Nutzlast.Der folgende Beispielscreenshot zeigt eine typische curl
-Anfrage, den Teil Anfrage und den Teil Antwort (zusammen mit der Antwortzeile).
Informationen zur Größe der Antwortzeile
Im oben beschriebenen Beispiel sieht die start-Zeile (erste Zeile) in der Antwort, die auch als Response-Line bezeichnet wird, so aus:
HTTP/1.1 200 OK
Diese Antwortzeile hat die Größe
~15 bytes
, da sie15 ASCII characters
enthält. Da dies innerhalb des zulässigen Limits in Apigee Edge liegt, wird die Antwort von Apigee Edge ohne Fehler an den Client zurückgesendet.- Wenn Sie sich
faultstring
in der Fehlermeldung oben ansehen, enthält sie"response line size exceeding 2,048"
. Dies weist darauf hin,dass die Response-Line in der vom Ziel-/Back-End-Server gesendeten HTTP-Antwort 2.048 Byte überschreitet.
Große Antwortzeile verstehen
Gemäß der Definition von Status-Line (hier als Response-Line bezeichnet) und typischen HTTP-Anfragen und -Antworten wäre die Größe viel kleiner als die in Apigee Edge definierte Standardbeschränkung von 2 K, sodass das Limit möglicherweise nicht erreicht wird. In den folgenden Fällen kann diese Beschränkung jedoch überschritten werden:
- Der Ziel-/Back-End-Server ist kein HTTP-System. Möglicherweise antwortet sie mit einer Nicht-HTTP-Antwort.
- Der Ziel-/Back-End-Server hat Probleme und sendet eine lange Antwortzeile als Teil der HTTP-Antwort.
Weitere Informationen finden Sie unter Fehlerprotokoll.http.TooBigLine, "Antwortzeilegröße über 2.048".
Das kann folgende Ursachen haben:
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Größe der Antwortzeile ist größer als zulässiges Limit | Die Größe der Response-Line, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet wird, 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:
- Melden Sie sich in der Apigee Edge-UI als Nutzer mit einer entsprechenden Rolle an.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
- Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
- Sie können den Filter Proxy auswählen, um den Fehlercode einzugrenzen.
- Stellen Sie den Fehlercode der Zeit gegenüber.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.TooBigLine
aus, wie unten dargestellt:Sie sehen die Informationen zum Fehlercode
protocol.http.TooBigLine
wie unten dargestellt: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:
502
- Fehlerquelle:
target
- Fehlercode:
protocol.http.TooBigLine
.
- Statuscode:
- Wenn die Fehlerquelle den Wert
target
und der Fehlercode den Wertprotocol.http.TooBigLine
hat, weist dies darauf hin, dass die Größe der Antwortzeile vom Ziel-/Back-End-Server größer als das maximal zulässige Limit in Apigee Edge ist.
Trace-Tool
- Aktivieren Sie die Trace-Sitzung und entweder:
- Warten Sie, bis der Fehler
502 Bad Gateway
auftritt. - Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus und reproduzieren Sie den
502 Bad Gateway
-Fehler.
- Warten Sie, bis der Fehler
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
In der Regel tritt der Fehler im Fehler
flowinfo
direkt nach der Phase Anfrage an Zielserver gesendet auf, wie unten dargestellt:Notieren Sie sich die Fehlerwerte aus dem Trace:
- Fehler:
response line exceeding 2,048
- error.class:
com.apigee.errors.http.server.BadGateway
Dies weist darauf hin, dass Apigee Edge (Message Processor-Komponente) den Fehler ausgibt, sobald die Antwort vom Back-End-Server empfangen wird, da die Größe der Antwortzeile das zulässige Limit überschreitet.
- Fehler:
Sie sehen die an den Client gesendete Fehlermeldung in der Phase Response Sent to Client (Antwort an den Client gesendet), wie unten dargestellt:
- Notieren Sie sich die Fehlerwerte aus dem Trace:
- Fehler:
502 Bad Gateway
. - Fehlerinhalt:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Fehler:
Sie können auch zur Phase AX (Aufgezeichnete Analytics-Daten) im Trace gehen und darauf klicken, um die Fehlerdetails aufzurufen.
Beachten Sie den Wert des folgenden Elements:
Anfrageheader Wert X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Fehlerinhalt : Text {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-
502
-Fehlern ermitteln. 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.
- Suchen Sie nach
502
-Fehlern innerhalb eines bestimmten Zeitraums (ob das Problem in der Vergangenheit aufgetreten ist) oder ob es immer noch Anfragen mit502
gibt, die fehlschlagen. Wenn Sie
502
-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-Fehler-Code und X-Apigee-Fehler-Quelle:
Antwortheader Wert X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Ursache: Die Größe der Antwortzeile überschreitet das zulässige Limit
Diagnose
- Bestimmen Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
- Wenn die Fehlerquelle den Wert
target
hat, gibt dies an, dass die von der Ziel-/Back-End-Serveranwendung an Apigee gesendete Größe der Antwortzeile größer als die zulässige Grenze in Apigee Edge ist. Mit einer der folgenden Methoden können Sie prüfen, ob die Größe der Antwortzeile die maximal zulässige Größe von 2 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
.Beispiel für eine Fehlermeldung:
"faultstring":"response line size exceeding 2,048"
Die obige
faultstring
gibt an, dass die Größe der Antwortzeile die zulässige Größe von 2 KB überschritten hat.Tatsächliche Anfrage
So validieren Sie mithilfe der tatsächlichen Anfrage:
Wenn Sie Zugriff auf die eigentliche Anfrage an die Ziel-/Back-End-Server-Anwendung haben, führen Sie die folgenden Schritte aus:
- Größe der Antwortzeile überprüfen
- Wenn Sie feststellen, dass die Größe des URI das zulässige Limit in Apigee Edge überschreitet, ist dies die Ursache des Problems.
Beispielantwort vom Ziel-/Back-End-Server:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
Im obigen Fall ist die
HTTP/1.1 200 1111…<trimmed>...11111111
der Antwortzeile größer als 2 KB, d. h., sie enthält mehr als 2 K ASCII-Zeichen.Wenn Sie einen anderen Client verwenden, können Sie die Clientlogs überprüfen und versuchen, die Größe der Antwortzeile 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 Antwortzeile das zulässige Limit in Apigee Edge überschritten hat.
- Bestimmen Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
Suchen Sie im Message Processor-Protokoll nach der Nachrichten-ID:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Die Linien von
system.log
sehen in etwa so aus:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
Der Text
message = response line size exceeding 2,048
in der obigen Fehlermeldung gibt an, dass die Antwortzeile größer als 2 KB ist. Daher gibt Apigee Edge die Ausnahme aus und gibt den Statuscode502
mit dem Fehlercodeprotocol.http.TooBigline
an Clientanwendungen zurück.
Auflösung
Größe korrigieren
Option 1 [empfohlen]: Beheben Sie das Problem, dass die Ziel-/Back-End-Serveranwendung keine Antwortzeilen sendet, deren Größe das zulässige Limit überschreitet.
- Analysieren Sie den Grund für den jeweiligen Client, eine Antwortzeile zu senden, deren Größe das unter Beschränkungen festgelegte Limit überschreitet.
- Wenn dies nicht gewünscht ist, ändern Sie die Ziel-/Back-End-Serveranwendung so, dass sie eine Antwortzeile sendet, deren Größe unter dem zulässigen Limit liegt.
- Wenn dies gewünscht ist und Sie eine Antwortzeile senden möchten, deren Größe das zulässige Limit überschreitet, fahren Sie mit den nächsten Optionen fort.
CwC
Option 2: CwC-Attribut verwenden, um das Limit für Antwortzeilen zu erhöhen
Apigee bietet eine CwC-Eigenschaft, mit der Sie das Größenlimit für die Antwortzeile erhöhen können. Weitere Informationen finden Sie unter Limit für Antwortzeile im Message Processor festlegen.
Einschränkungen
Apigee erwartet, dass die Clientanwendung und der Back-End-Server keine Anfrage-/Antwortzeilen senden, deren Größe das zulässige Limit überschreitet, das unter Zeilenlimit für Anfrage/Antwort in Grenzwerte für Apigee Edge dokumentiert ist.
- Wenn Sie ein Nutzer einer öffentlichen Cloud sind, ist die maximale Größe für die Größe von Anfrage- und Antwortzeilen unter Größe der Anfrage-/Antwortzeile unter Limits für Apigee Edge dokumentiert.
- Wenn Sie ein Private Cloud-Nutzer sind, haben Sie möglicherweise die standardmäßige Höchstgrenze für die Größe von Anfragen und Antwortzeilen geändert (obwohl dies nicht empfohlen wird). Sie können die maximale Größe für Antwortzeilen anhand der Anleitung unter Aktuelles Limit 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 HTTPResponse.line.limit
mit einem neuen Wert auf den Message Processors aktualisiert wurde.
- Suchen Sie auf dem Message Processor-Computer im Verzeichnis
/opt/apigee/edge-message-processor/conf
nach dem AttributHTTPResponse.line.limit
und prüfen Sie, welcher Wert wie unten dargestellt festgelegt wurde:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- Das Ergebnis des obigen Befehls sieht so aus:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
In der obigen Beispielausgabe wurde das Attribut
HTTPResponse.line.limit
auf den Wert2k
inhttp.properties
gesetzt.Dies weist darauf hin, dass das Limit für die in Apigee für Private Cloud konfigurierte Größe der Antwortzeile 2 KB beträgt.
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
- Schließen Sie den curl-Befehl ab, mit dem der Fehler
502
reproduziert wird - 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 Fehler502
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