502 Bad Gateway – DuplicateHeader

<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.

<ph type="x-smartling-placeholder">

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:

  1. <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Achten Sie darauf, dass der Filter Proxy auf Alle gesetzt ist.
  6. Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.
  7. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.DuplicateHeader aus, wie unten gezeigt:

    (größeres Bild anzeigen)

  8. Informationen über den Fehlercode protocol.http.DuplicateHeader werden wie folgt angezeigt:

    (größeres Bild anzeigen)

  9. Achten Sie darauf, dass der Statuscode 502 ist, wie im obigen Beispiel gezeigt.
  10. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
  11. Achten Sie im Log-Fenster auf die folgenden Details:

    • Statuscode: 502
    • Fehlerquelle: target
    • Fehlercode: protocol.http.DuplicateHeader.
  12. 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:

  1. Aktivieren Sie die Trace-Sitzung und entweder <ph type="x-smartling-placeholder">
      </ph>
    1. Warten Sie, bis der Fehler 502 Bad Gateway auftritt, oder
    2. Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus und reproduzieren Sie 502 Bad Gateway Fehler
  2. Achten Sie darauf, dass Alle Ablaufinformationen anzeigen aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
  5. Sie finden den Fehler normalerweise in einem Ablauf nach der Anfrage an das Ziel gesendet server-Phase wie unten gezeigt:

    (größeres Bild anzeigen)

  6. 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 Header Expires mehrmals gesendet hat.

  7. Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
  8. 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:

    (größeres Bild anzeigen)

  9. Sie sehen die Werte X-Apigee-fault-code und X-Apigee-fault-code. als protocol.http.DuplicateHeader und target, was bedeutet, dass Dieser Fehler wird verursacht, weil vom Backend-Server doppelte Header für den Antwortheader Expires.
    Antwortheader Wert
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source target
  10. Prüfen Sie, ob Sie Proxy-Verkettung wenn der Zielserver oder Zielendpunkt einen anderen Proxy in Apigee aufruft.

    1. Um dies zu ermitteln, gehen Sie zurück zur Serverphase Anfrage an Ziel gesendet. Klicken Sie auf Show Curl (Curl anzeigen).

    2. Das Fenster Curl für die an den Zielserver gesendete Anfrage wird geöffnet, in dem Sie den Host-Alias des Zielservers zu ermitteln.

    3. 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.
    4. 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:

  1. Als Private Cloud-Nutzer können Sie NGINX-Zugriffslogs für folgende Zwecke verwenden: die wichtigsten Informationen zu HTTP-502-Fehlern ermitteln.
  2. 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.

  3. 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 mit 502
  4. Wenn Sie 502-Fehler mit dem X-Apigee-Fehlercode finden die dem Wert von protocol.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

  1. 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.
  2. Wenn die Fehlerquelle den Wert target hat, weist dies darauf hin, dass die Antwort die vom Zielserver gesendet wurden, enthält doppelte Header.
  3. 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:

    1. 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\""
      
    2. In der obigen Fehlermeldung sehen Sie, dass der Header Expires gesendet wird mehr als einmal, wie in faultstring zu sehen.

    Tatsächliche Anfrage

    Mit der eigentlichen Anfrage:

    1. 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.
    2. Wenn Sie Zugriff auf die Anfrage haben, die an die Zielserveranwendung gesendet wurde, Führen Sie dann die folgenden Schritte aus:

      1. 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
        
      2. 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 Expires als einmal. Daher schlägt diese Anfrage mit dem 502 Bad Gateway fehl. Fehler und den Fehlercode protocol.http.DuplicateHeader.

        <ph type="x-smartling-placeholder">
      3. Wenn der Header, dessen Name in faultstring erscheint, erscheint in der Antwort des Back-End-Servers ein, ist das der Grund Fehler. Im obigen Fall wird der Header Expires mehrmals gesendet.

        <ph type="x-smartling-placeholder">

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">
  1. 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.
  2. Ä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 den Expires-Header nur einmal übergibt.
  3. 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
  1. 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.
  2. 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 des 502-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