Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 400 Bad Request mit dem Fehlercode
protocol.http.DuplicateHeader als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 400 Bad Request
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-Anfrage auftritt, die vom Client an Apigee Edge gesendet wird.
Gemäß
RFC 7230, Abschnitt 3.2.2: Feldreihenfolge, darf ein Absender in einer Nachricht nicht mehrere Headerfelder 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 einen bestimmten Header, der keine
Duplikate haben darf, mehr als einmal in der HTTP-Anfrage findet, die vom Client gesendet wird, antwortet es mit 400 Bad Request 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 Anfrage | Die HTTP-Anfrage von der Clientanwendung an Apigee 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 entsprechenden 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 Proxy-Filter auf Alle festgelegt 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 angezeigt wie unten 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:
400 - Fehlerquelle:
apigee - Fehlercode:
protocol.http.DuplicateHeader.
- Statuscode:
- Wenn die Fehlerquelle den Wert
apigeeoderMPhat und der Fehlercode den Wertprotocol.http.DuplicateHeader, enthält die HTTP-Anfrage vom Client doppelte Header.
Trace-Tool
NGINX
So diagnostizieren Sie den Fehler mit NGINX-Zugriffslogs:
- Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffslogs verwenden, um
die wichtigsten Informationen zu HTTP-
400Fehlern 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
400-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit400fehlschlagen. Wenn Sie
400-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 400-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 MP
Ursache: Doppelter Header in der Anfrage
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
apigeeoderMPhat, bedeutet dies, dass die von der Clientanwendung an Apigee gesendete Anfrage doppelte Header enthält. Sie können den tatsächlichen Header, der mehrmals als Teil der Anfrage 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, dann 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 Zugriff auf die tatsächliche Anfrage der Clientanwendung haben, führen Sie die folgenden Schritte aus:
- Prüfen Sie die Liste der in der Anfrage übergebenen Header.
- Wenn ein bestimmter Header mehrmals mit demselben oder unterschiedlichen Werten in der Anfrage vorkommt , ist das die Ursache für diesen Fehler.
Beispielanfrage:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
In der obigen Beispielanfrage wird der Header
Expiresmehrmals gesendet. Daher schlägt diese Anfrage mit dem400 Bad RequestFehler und dem Fehlercode:protocol.http.DuplicateHeaderfehl.- Alternativ können Sie in den Clientlogs nach Informationen zur tatsächlichen Anfrage an Apigee Edge suchen und den Header ermitteln, der mehrmals gesendet wird.
Auflösung
Duplikate beheben
Option 1 [empfohlen]: Clientanwendung so korrigieren, dass keine doppelten Header enthalten sind
- Analysieren Sie den Grund dafür, dass der bestimmte Client einen doppelten Header sendet. Im obigen Fall ist das beispielsweise
ExpiresPrüfen Sie, ob die API-Proxys den doppelten Header akzeptieren können. Gemäß der HTTP-Spezifikation RFC7230 ist das in der Regel nicht erwünscht. - Wenn das nicht erwünscht ist, ändern Sie Ihre Clientanwendung 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 denExpiresHeader nur einmal übergeben, wie unten gezeigt:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- Wenn das erwünscht ist und Sie die doppelten Header zulassen möchten, fahren Sie mit Option 2: CwC-Attribut verwenden fort.
CwC
Option 2: CwC-Attribut verwenden
Apigee provides a
CwC property HTTPHeader.<HeaderName> ,mit dem Client
anwendungen 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 Message Processor festgelegt werden, um Duplikate und
mehrere Werte für den Header Expires zuzulassen.
HTTPHeader.Expires=allowDuplicates, multiValued
- Wenn Sie Private Cloud-Nutzer sind, können Sie das Attribut so konfigurieren, dass
Apigee Edge keinen
400 Bad RequestFehler auslöst, auch wenn die Anfrage doppelte Header enthält. Eine Anleitung dazu finden Sie unter Message Processor für die Verwendung doppelter Header konfigurieren. - Wenn Sie Public Cloud-Nutzer sind, wenden Sie sich an den Apigee Edge-Support, um dieses Attribut für Ihre Organisation zu konfigurieren.
Spezifikation
Apigee erwartet, dass die Clientanwendung gemäß den folgenden RFC-Spezifikationen keine doppelten Header als Teil der Anfrage sendet:
| 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 den Abschnitt 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 zum Reproduzieren des400-Fehlers - 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 Umgebung
- API-Proxy-Bundle
- Vollständiger
curl-Befehl zum Reproduzieren des400-Fehlers - 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.
- Systemlogs des Message Processors:
/opt/apigee/var/log/edge-message-processor/logs/system.log