<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Symptom
Die Clientanwendung ruft den HTTP-Statuscode 502 Bad Gateway
mit Fehlercode ab
protocol.http.DuplicateHeader
als Antwort auf API-Aufrufe an.
Fehlermeldung
Die Clientanwendung ruft den folgenden Antwortcode ab:
HTTP/1.1 502 Bad Gateway
Außerdem kann eine Fehlermeldung wie die folgende angezeigt werden:
{ "fault":{ "faultstring":"Duplicate Header \"Expires\"", "detail":{ "errorcode":"protocol.http.DuplicateHeader" } } }
Mögliche Ursachen
Dieser Fehler tritt auf, wenn ein bestimmter HTTP-Header, der in Apigee keine Duplikate enthalten darf, Edge, erscheint mehr als einmal mit denselben oder unterschiedlichen Werten als Teil der HTTP-Antwort, die von Back-End-Server an Apigee Edge.
Gemäß
RFC 7230, Abschnitt 3.2.2: Feldreihenfolge. Ein Absender DARF KEINE Mehrfach-Header generieren.
Felder mit demselben Feldnamen in einer Nachricht, es sei denn, der gesamte Feldwert
Header-Feld ist als eine durch Kommas getrennte Liste definiert [d.h. #(values)] oder das Header-Feld ein
bekannte Ausnahme sein. Wenn Apigee Edge feststellt, dass ein bestimmter Header
Duplikate enthalten, mehr als einmal in der HTTP-Antwort gesendet wird, die vom
Ziel-/Back-End-Server,
antwortet er mit 502 Bad Gateway
und dem Fehlercode.
protocol.http.DuplicateHeader
.
Mögliche Ursachen für diesen Fehler:
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Doppelte Header-Antwort | Die Antwort des Backend-Servers enthält doppelte Header. | Edge-Nutzer von öffentlichen und privaten Clouds |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools oder Techniken, um diesen Fehler zu diagnostizieren:
API-Monitoring
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:
- <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
- Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
- Achten Sie darauf, dass der Filter Proxy auf Alle gesetzt ist.
- Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.DuplicateHeader
aus, wie unten gezeigt:Informationen über den Fehlercode
protocol.http.DuplicateHeader
werden wie folgt angezeigt:- Achten Sie darauf, dass der Statuscode
502
ist, wie im obigen Beispiel gezeigt. - Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
Achten Sie im Log-Fenster auf die folgenden Details:
- Statuscode:
502
- Fehlerquelle:
target
- Fehlercode:
protocol.http.DuplicateHeader
.
- Statuscode:
- Die Fehlerquelle lautet
target
. Dies bedeutet, dass die Antwort vom Back-End-Server doppelte Header enthielt.
Trace-Tool
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und entweder
<ph type="x-smartling-placeholder">
- </ph>
- Warten Sie, bis der Fehler
502 Bad Gateway
auftritt, oder - Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus und reproduzieren Sie
502 Bad Gateway
Fehler
- Warten Sie, bis der Fehler
Achten Sie darauf, dass Alle Ablaufinformationen anzeigen aktiviert ist:
- 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.
Sie finden den Fehler normalerweise in einem Ablauf nach der Anfrage an das Ziel gesendet server-Phase wie unten gezeigt:
Notieren Sie sich den Wert des Fehlers aus dem Trace.
Im obigen Beispiel-Trace wird der Fehler als
Duplicate Header "Expires"
angezeigt. Seit wird der Fehler von Apigee ausgegeben, nachdem die Anfrage an den Backend-Server gesendet wurde, dass der Backend-Server den HeaderExpires
mehrmals gesendet hat.- Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
Scrollen Sie nach unten zum Abschnitt Phase Details - Response Headers (Phase-Details – Antwort-Header) und bestimmen Sie die für X-Apigee-fault-code und X-Apigee-fault-code, wie unten gezeigt:
- Sie sehen die Werte X-Apigee-fault-code und X-Apigee-fault-code.
als
protocol.http.DuplicateHeader
undtarget
, was bedeutet, dass Dieser Fehler wird verursacht, weil vom Backend-Server doppelte Header für den AntwortheaderExpires
.Antwortheader Wert X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
Prüfen Sie, ob Sie Proxy-Verkettung wenn der Zielserver oder Zielendpunkt einen anderen Proxy in Apigee aufruft.
Um dies zu ermitteln, gehen Sie zurück zur Serverphase Anfrage an Ziel gesendet. Klicken Sie auf Show Curl (Curl anzeigen).
Das Fenster Curl für die an den Zielserver gesendete Anfrage wird geöffnet, in dem Sie den Host-Alias des Zielservers zu ermitteln.
- Wenn der Hostalias des Zielservers auf einen Alias des virtuellen Hosts verweist, ist es ein Proxy
Verkettungen. In diesem Fall müssen Sie alle oben genannten Schritte für den verketteten Proxy wiederholen, bis
können Sie ermitteln, wo der
502 Bad Gateway
-Fehler tatsächlich liegt. - Wenn der Hostalias des Zielservers auf Ihren Backend-Server verweist, gibt er an, dass sendet Ihr Back-End-Server die doppelten Header in der Antwort an Apigee.
NGINX
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Als Private Cloud-Nutzer können Sie NGINX-Zugriffslogs für folgende Zwecke verwenden:
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 ersetzt durch tatsächliche Werte.
- Suchen, um zu sehen, ob es während eines bestimmten Zeitraums
502
Fehler gibt (wenn das Problem in der Vergangenheit aufgetreten ist) oder wenn immer noch Anfragen mit502
Wenn Sie
502
-Fehler mit dem X-Apigee-Fehlercode finden die dem Wert vonprotocol.http.DuplicateHeader
entspricht, dann Bestimmen Sie den Wert von X-Apigee-fault-source..Beispielfehler 502 aus dem NGINX-Zugriffsprotokoll:
Der obige Beispieleintrag aus dem NGINX-Zugriffsprotokoll enthält die folgenden Werte für X- Apigee-Fehlercode und X-Apigee-Fehler-Quelle:
Antwortheader Wert X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
Ursache: Doppelte Kopfzeile als Antwort
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für den mit der API beobachteten Fehler. Monitoring- oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
- Wenn die Fehlerquelle den Wert
target
hat, weist dies darauf hin, dass die Antwort die vom Zielserver gesendet wurden, enthält doppelte Header. Sie können den tatsächlichen Header ermitteln, der mehrmals als Teil der Antwort gesendet wird. mithilfe einer der folgenden Methoden:
Fehlermeldung
Über die Fehlermeldung:
Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, verweisen Sie auf zu
faultstring
.faultstring
enthält den Headernamen, der wurde mehrmals gesendet.Beispiel für eine Fehlermeldung:
"faultstring":"Duplicate Header \"Expires\""
- In der obigen Fehlermeldung sehen Sie, dass der Header
Expires
gesendet wird mehr als einmal, wie infaultstring
zu sehen.
Tatsächliche Anfrage
Mit der eigentlichen Anfrage:
- Wenn Sie keinen Zugriff auf die Anfrage haben, die an den Zielserver gesendet wurde,
entsprechenden
curl
-Befehl von Trace-Tool verwenden, Schritt 10.a und Schritt 10.b. Wenn Sie Zugriff auf die Anfrage haben, die an die Zielserveranwendung gesendet wurde, Führen Sie dann die folgenden Schritte aus:
Rufen Sie den Zielserver auf.
Beispielanfrage für den in diesem Beispiel verwendeten Zielserver:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
Prüfen Sie die Liste der Header in der Antwort.
Beispielantwort des in diesem Beispiel verwendeten Zielservers:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
In der Beispielanfrage oben wird der Header
<ph type="x-smartling-placeholder">Expires
als einmal. Daher schlägt diese Anfrage mit dem502 Bad Gateway
fehl. Fehler und den Fehlercodeprotocol.http.DuplicateHeader
.Wenn der Header, dessen Name in
<ph type="x-smartling-placeholder">faultstring
erscheint, erscheint in der Antwort des Back-End-Servers ein, ist das der Grund Fehler. Im obigen Fall wird der HeaderExpires
mehrmals gesendet.
Auflösung
Duplikate beheben
Option 1 [empfohlene Option] Probleme mit dem Backend-Server beheben, sodass keine doppelten Header eingefügt werden
<ph type="x-smartling-placeholder">- Analysieren Sie den Grund für das Senden eines doppelten Headers durch den jeweiligen Backend-Server
Expires
und prüfen Sie, ob die API-Proxys dies akzeptieren können. In In den meisten Fällen ist es gemäß der HTTP-Spezifikation nicht sinnvoll, RFC7230. - Ändern Sie andernfalls Ihre Zielserveranwendung so, dass keine doppelten Header gesendet werden.
Im oben beschriebenen Beispiel wird die Kopfzeile
Expires
gesendet, zweimal mit demselben Wert, was nicht wünschenswert ist. Sie können das Problem beheben, indem Sie dass der Zielserver denExpires
-Header nur einmal übergibt. - Wenn dies gewünscht ist und Sie die doppelten Kopfzeilen zulassen möchten, gehen Sie zu Option 2: CwC-Attribut verwenden.
CwC
Option 2: CwC-Attribut verwenden
<ph type="x-smartling-placeholder">Apigee bietet ein CwC-Attribut.
HTTPHeader.<HeaderName>
,mit dem Clientanwendungen und
Server zum Senden doppelter Header an API-Proxys in Apigee Edge.
CwC-Property | Werte |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Die folgende Eigenschaft kann beispielsweise in den Message Processors festgelegt werden, um Duplikate zuzulassen.
und mehrere Werte für die Überschrift Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie das Attribut so konfigurieren, dass Apigee nicht verwendet wird
Edge einen
502 Bad Gateway
-Fehler ausgibt, auch wenn die Anfrage enthält doppelte Header mithilfe der Methode <ph type="x-smartling-placeholder"></ph> Anleitung zur Konfiguration von Message Processors für die Verwendung doppelter Header. - Wenn Sie ein Öffentlicher Cloud-Nutzer sind, wenden Sie sich an den Apigee Edge-Support, um dies zu konfigurieren für Ihre Organisation.
Spezifikation
Apigee antwortet mit der Fehlerantwort 502 Bad Gateway
, da erwartet wird, dass der
Back-End-Server gemäß den folgenden RFC-Spezifikationen verhalten:
Spezifikation |
---|
<ph type="x-smartling-placeholder"></ph> RFC 7230, Abschnitt 3.2.2: Feldreihenfolge |
<ph type="x-smartling-placeholder"></ph> RFC 7230, Abschnitt 3.2: Headerfelder |
Wenn Sie weitere Unterstützung vom Apigee-Support benötigen, rufen Sie auf. Diagnosedaten 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
- Vollständiger
curl
-Befehl zum Reproduzieren des502
-Fehlers - Ablaufverfolgungsdatei für API-Anfragen
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für fehlgeschlagene Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Ablaufverfolgungsdatei für API-Anfragen
NGINX-Zugriffslogs:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Wo:ORG, ENV und PORT# werden ersetzt durch tatsächliche Werte.
- Systemprotokolle für Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log