Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 502 Bad Gateway mit dem Fehlercode
protocol.http.DuplicateHeader als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 502 Bad Gateway
Außerdem wird möglicherweise eine Fehlermeldung ähnlich der folgenden angezeigt:
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}Mögliche Ursachen
Dieser Fehler tritt auf, wenn ein bestimmter HTTP-Header, der keine Duplikate in Apigee Edge haben darf, mehrmals mit denselben oder unterschiedlichen Werten als Teil der HTTP-Antwort auftritt, die vom Backend-Server an Apigee Edge gesendet wird.
Gemäß
RFC 7230, Abschnitt 3.2.2: Feldreihenfolge, darf ein Absender in einer Nachricht nicht mehrere Header
felder mit demselben Feldnamen generieren, es sei denn, der gesamte Feldwert für dieses
Headerfeld ist als durch Kommas getrennte Liste definiert ( #(values)]) oder das Headerfeld ist eine
bekannte Ausnahme. Wenn Apigee Edge feststellt, dass ein bestimmter Header, der keine Duplikate haben darf, mehrmals in der HTTP-Antwort gesendet wird, die vom Ziel-/Backend-Server gesendet wird, antwortet Apigee Edge 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 |
|---|---|---|
| Doppelter Header in der Antwort | Die Antwort vom Backend-Server enthält doppelte Header. | 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 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.
- Achten Sie darauf, dass der Filter Proxy auf Alle gesetzt ist.
- Stellen Sie Fehlercode im Verhältnis zu Zeit dar.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.DuplicateHeaderaus, wie unten gezeigt:
Informationen zum Fehlercode
protocol.http.DuplicateHeaderwerden wie unten gezeigt angezeigt:
- Achten Sie darauf, dass der Statuscode
502ist, wie im obigen Beispiel gezeigt. - 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.DuplicateHeader.
- Statuscode:
- Die Fehlerquelle ist
target. Das bedeutet, dass die Antwort vom Backend-Server doppelte Header enthielt.
Trace-Tool
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und führen Sie eine der folgenden Aktionen aus:
- Warten Sie, bis der Fehler
502 Bad Gatewayauftritt. - Wenn Sie das Problem reproduzieren können, stellen Sie den API-Aufruf und reproduzieren Sie den
502 Bad GatewayFehler
- Warten Sie, bis der Fehler
Achten Sie darauf, dass Alle Ablaufinformationen anzeigen aktiviert ist:

- Wählen Sie eine der fehlgeschlagenen Anfragen aus und untersuchen Sie den Trace.
- Navigieren Sie durch die verschiedenen Phasen des Traces und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Der Fehler tritt in der Regel in einem Ablauf nach der Phase Anfrage an Zielserver gesendet auf, 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. Da der Fehler von Apigee ausgelöst wird, nachdem die Anfrage an den Backend-Server gesendet wurde, bedeutet dies, dass der Backend-Server den HeaderExpiresmehrmals gesendet hat.- Rufen Sie im Trace die Phase AX (Analysedaten aufgezeichnet) auf und klicken Sie darauf.
Scrollen Sie nach unten zum Abschnitt Phasendetails – Antwortheader und ermitteln Sie die Werte von X-Apigee-fault-code und X-Apigee-fault-source wie unten gezeigt:

- Die Werte von X-Apigee-fault-code und X-Apigee-fault-source sind
protocol.http.DuplicateHeaderundtarget. Das bedeutet, dass dieser Fehler dadurch verursacht wird, dass der Backend-Server doppelte Header für den AntwortheaderExpiresübergeben hat.Antwortheader Wert X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target Prüfen Sie, ob Sie die Proxy-Verkettung verwenden; d. h., ob der Zielserver oder Zielendpunkt einen anderen Proxy in Apigee aufruft.
Rufen Sie dazu die Phase Anfrage an Zielserver gesendet auf. Klicken Sie auf Curl anzeigen.
Das Fenster Curl für Anfrage an Zielserver gesendet wird geöffnet. Hier können Sie den Hostalias des Zielservers ermitteln.
- Wenn der Hostalias des Zielservers auf einen Alias des virtuellen Hosts verweist, handelt es sich um eine Proxy
Verkettung. In diesem Fall müssen Sie alle oben genannten Schritte für den verketteten Proxy wiederholen, bis
Sie die tatsächliche Ursache für den Fehler
502 Bad Gatewayermittelt haben. - Wenn der Hostalias des Zielservers auf Ihren Backend-Server verweist, bedeutet das, dass Ihr Backend-Server die doppelten Header in der Antwort an Apigee sendet.
NGINX
So diagnostizieren Sie den Fehler mit NGINX-Zugriffslogs:
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie NGINX-Zugriffslogs verwenden, um
die wichtigsten Informationen zu HTTP
502Fehlern zu ermitteln. Prüfen Sie die NGINX-Zugriffslogs:
/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
502-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit502fehlschlagen. Wenn Sie
502-Fehler finden, bei denen der X-Apigee-fault-code mit dem Wertprotocol.http.DuplicateHeaderübereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.Beispiel für einen 502-Fehler aus dem NGINX-Zugriffslog:
Der obige Beispiel-Eintrag aus dem NGINX-Zugriffslog hat die folgenden Werte für X- Apigee-fault-code und X-Apigee-fault-source:
Antwortheader Wert X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target
Ursache: Doppelter Header in der Antwort
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API Monitoring oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte beschrieben.
- Wenn die Fehlerquelle den Wert
targethat, bedeutet das, dass die vom Zielserver gesendete Antwort doppelte Header enthält. Sie können den tatsächlichen Header, der mehrmals als Teil der Antwort gesendet wird, mit einer der folgenden Methoden ermitteln:
Fehlermeldung
Fehlermeldung verwenden :
Wenn Sie Zugriff auf die vollständige Fehlermeldung haben, die Sie von Apigee Edge erhalten haben, sehen Sie sich den
faultstringan. Derfaultstringenthält den Headernamen, der mehrmals gesendet wurde.Beispiel für eine Fehlermeldung:
"faultstring":"Duplicate Header \"Expires\""
- In der obigen Fehlermeldung sehen Sie, dass der Header
Expiresmehrmals gesendet wurde, wie imfaultstringzu sehen ist.
Tatsächliche Anfrage
Tatsächliche Anfrage verwenden :
- Wenn Sie keinen Zugriff auf die tatsächliche Anfrage an den Zielserver haben, rufen Sie den entsprechenden
curlBefehl unter Trace-Tool verwenden, Schritt 10a und Schritt 10b ab. Wenn Sie Zugriff auf die tatsächliche Anfrage an die Zielserveranwendung haben, führen Sie 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 vom in diesem Beispiel verwendeten Zielserver:
* ...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 obigen Beispielanfrage wird der Header
Expiresmehrmals gesendet. Daher schlägt diese Anfrage mit dem502 Bad GatewayFehler und dem Fehlercodeprotocol.http.DuplicateHeaderfehl.Wenn der Header, dessen Name im
faultstringangezeigt wird, mehrmals in der Antwort des Backend-Servers vorkommt, ist das die Ursache für diesen Fehler. Im obigen Fall wird der HeaderExpiresmehrmals gesendet.
Auflösung
Duplikate beheben
Option 1 [empfohlen]: Backend-Server so korrigieren, dass keine doppelten Header enthalten sind
- Analysieren Sie, warum der bestimmte Backend-Server den doppelten Header
Expiressendet, und prüfen Sie, ob die API-Proxys das akzeptieren können. In den meisten Fällen ist das gemäß der HTTP-Spezifikation RFC7230 nicht erwünscht. - Wenn das nicht erwünscht ist, ändern Sie Ihre Zielserveranwendung so, dass keine doppelten Header gesendet werden.
Im oben beschriebenen Beispiel wird der Header
Expireszweimal mit demselben Wert gesendet, was nicht erwünscht ist. Sie können das Problem beheben, indem Sie dafür sorgen, dass der Zielserver denExpiresHeader nur einmal übergibt. - Wenn das erwünscht ist und Sie die doppelten Header zulassen möchten, lesen Sie Option 2: CwC-Attribut verwenden.
CwC
Option 2: CwC-Attribut verwenden
Apigee bietet ein CwC-Attribut
HTTPHeader.<HeaderName> ,mit dem Clientanwendungen und Zielserver doppelte Header an API-Proxys in Apigee Edge senden können.
| CwC-Attribut | Werte |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Das folgende Attribut kann beispielsweise für die Nachrichtenverarbeiter festgelegt werden, um Duplikate
und mehrere Werte für den Header Expires zuzulassen.
HTTPHeader.Expires=allowDuplicates, multiValued
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie das Attribut so konfigurieren, dass Apigee
Edge keinen Fehler
502 Bad Gatewayauslöst, auch wenn die Anfrage doppelte Header enthält. Eine Anleitung dazu finden Sie unter Nachrichtenverarbeiter für die Verwendung doppelter Header konfigurieren. - Wenn Sie ein Public Cloud-Nutzer sind, wenden Sie sich an den Apigee Edge-Support, um dieses Attribut für Ihre Organisation zu konfigurieren.
Spezifikation
Apigee antwortet mit der 502 Bad Gateway Fehlermeldung, da der
Backend-Server gemäß den folgenden RFC-Spezifikationen funktionieren sollte:
| Spezifikation |
|---|
| RFC 7230, Abschnitt 3.2.2: Feldreihenfolge |
| RFC 7230, Abschnitt 3.2: Headerfelder |
Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, lesen Sie 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 ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- Name des API-Proxys
- Vollständiger
curl-Befehl zum Reproduzieren des Fehlers502 - Trace-Datei für die API-Anfragen
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Trace-Datei für die API-Anfragen
NGINX-Zugriffslogs:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV und PORT# durch tatsächliche Werte ersetzt.
- Systemprotokolle des Message Processors
/opt/apigee/var/log/edge-message-processor/logs/system.log