Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Gemäß der HTTP-Spezifikation RFC 7230, Abschnitt 3.2.2: Feldreihenfolge erwartet Apigee Edge, dass die HTTP-Anfrage vom Client oder die HTTP-Antwort vom Back-End-Server nicht denselben Header enthält, der mehrmals mit denselben oder unterschiedlichen Werten übergeben wird, es sei denn, der spezifische Header hat eine Ausnahme und darf Duplikate haben.
Standardmäßig erlaubt Apigee Edge die Weitergabe von Duplikaten und mehreren Werten an die meisten HTTP-Header. Bestimmte Header, die unter Header, die keine Duplikate und mehrere Werte enthalten dürfen aufgeführt sind, sind jedoch nicht zulässig. Beispiele:
- Sie erhalten
400 Bad Request
mit dem Fehlercodeprotocol.http.DuplicateHeader
, wenn der Client eine HTTP-Anfrage mit einem bestimmten Header mehr als einmal oder mit mehreren Werten für die HTTP-Header sendet, die in Apigee Edge keine Duplikate/mehrere Werte haben dürfen. - In ähnlicher Weise erhalten Sie
502 Bad Gateway
mit dem Fehlercodeprotocol.http.DuplicateHeader
, wenn der Back-End-Server eine HTTP-Antwort mit einem bestimmten Header mehr als einmal oder mit mehreren Werten für die HTTP-Header sendet, die in Apigee Edge keine Duplikate oder mehrere Werte haben dürfen.
Die empfohlene Lösung zur Behebung dieser Fehler besteht darin, die Clientanwendung und den Back-End-Server so zu konfigurieren, dass keine doppelten Header gesendet werden und die Spezifikation RFC 7230, Abschnitt 3.2.2: Feldreihenfolge eingehalten wird, wie in den folgenden Playbooks zur Fehlerbehebung erläutert:
Mitunter kann es jedoch sinnvoll sein, eine Ausnahme hinzuzufügen, um Duplikate und mehrere Werte für einige HTTP-Header einzubeziehen. In solchen Situationen können Sie doppelte Header und mehrere Werte für einen bestimmten HTTP-Header zulassen, indem Sie die Eigenschaft HTTPHeader.HEADER_NAME
auf Message Processor-Ebene festlegen.
In diesem Dokument findest du Informationen zu dieser Property. Außerdem wird erläutert, wie sie aktiviert wird, um die oben genannten Fehler zu vermeiden. Außerdem findest du Best Practices dazu.
HTTP-Header-Eigenschaften, um Duplikate und mehrere Werte zuzulassen
Apigee Edge bietet die folgenden zwei Eigenschaften, um das Verhalten bei der Zulassung von Duplikaten und mehreren Werten für HTTP-Header zu steuern. Beachten Sie, dass diese nur auf den Message Processors unter Verwendung der Tokensyntax konfiguriert werden können, die unter Edge konfigurieren erläutert wird.
Property-Name | Beschreibung | Zulässige Werte |
---|---|---|
HTTPHeader.ANY |
Diese Eigenschaft gibt an, ob Duplikate oder mehrere Werte für alle HTTP-Header zulässig sind, einschließlich der benutzerdefinierten Header, die als Teil der HTTP-Anfrage vom Client oder der vom Back-End-Server an Apigee Edge gesendeten HTTP-Antwort gesendet wurden. Standardwert:
|
|
|
Mit diesem Attribut wird das Verhalten eines bestimmten Headers im Vergleich zu |
Wie oben. |
Header, die keine Duplikate und mehrere Werte enthalten dürfen
Wie bereits erwähnt, erlaubt Apigee Edge standardmäßig Duplikate und mehrere Werte für die meisten HTTP-Header. Dies liegt daran, dass das Attribut HTTPHeader.ANY
mit dem Wert multivalued, allowDuplicate.
konfiguriert ist.
Konfiguration überschrieben
Bei einigen bestimmten Headern wird die Standardkonfiguration mit einer der folgenden Methoden überschrieben:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
Durch diese Konfiguration ändert sich das Standardverhalten nicht. Das heißt, der spezifische Header darf Duplikate und mehrere Werte enthalten.
.HTTPHeader.HEADER_NAME=
Durch diese Konfiguration ändert sich das Standardverhalten. Das heißt, der spezifische Header darf keine Duplikate und mehrere Werte enthalten.
Header ermitteln, die keine Duplikate und mehrere Werte enthalten dürfen
In diesem Abschnitt wird beschrieben, wie Sie Folgendes bestimmen können:
- Die spezifischen Header, die in Ihrer Apigee Edge Private Cloud-Einrichtung keine Duplikate und mehrere Werte enthalten dürfen , und
- Die spezifischen Header mit bereits vorhandener Konfiguration
Suchen Sie auf dem Message Processor-Computer wie unten gezeigt im Verzeichnis
/opt/apigee/edge-message-processor/conf
nach der EigenschaftHTTPHeader.
:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
Beispielausgabe:
# grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued … <snipped> /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates … <snipped>
- Wie im Abschnitt Konfiguration überschrieben erläutert, beachten Sie die folgenden Informationen in der obigen Beispielausgabe:
- Der HTTP-Header
Connection
wird überschrieben, darf aber Duplikate und mehrere Werte enthalten - Die HTTP-Header
Host
undExpires
werden überschrieben und dürfen keine Duplikate und mehrere Werte enthalten - Der HTTP-Header
Date
wird überschrieben und darf Duplikate enthalten, darf aber nicht mehrere Werte enthalten - Alle hier aufgeführten Header (im Beispiel oben
Connection
,Host
,Expires
undDate
) werden in diesem Dokument als Header mit bereits vorhandener Konfiguration bezeichnet.
- Der HTTP-Header
Verhalten von Apigee Edge
In der folgenden Tabelle wird das Verhalten von Apigee Edge beschrieben, wenn die Header als Duplikate und mit mehreren Werten gesendet werden, je nachdem, wie die HTTPHeader
-Attribute auf den Nachrichtenprozessoren konfiguriert sind. Beispiel: HTTPHeader
von test-header
.
Anfragen | Ausgehende HEADERS basierend auf dem Wert von conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Leer> | allowDuplicate | multiValued | „allowDuplicate“, „multiValued“ (STANDARD) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Intern haben wir
Dann wird der Fehler |
Intern haben wir
aber das ursprüngliche Formular wird an das Ziel gesendet. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Hinweis
Bevor Sie die Schritte in diesem Dokument verwenden, sollten Sie sich mit dem Konfigurieren der Eigenschaften für Edge in der Private Cloud vertraut machen, wie unter Edge konfigurieren beschrieben.
„allowDuplicates“ und mehrere Werte für Header konfigurieren
Wie unter HTTP-Header-Attribute zum Zulassen von Duplikaten und mehreren Werten erläutert, impliziert der Wert des Attributs HTTPHeader.ANY = allowDuplicates,
multivalued
, dass alle Header Duplikate und mehrere Werte in Apigee Edge haben dürfen. Es gibt jedoch bestimmte Header, deren Werte explizit überschrieben werden, um mit dem Attribut HTTPHeader.HEADER_NAME
keine doppelten Header oder mehrere Werte zuzulassen.
In diesem Abschnitt wird erläutert, wie Sie das Attribut HTTPHeader.HEADER_NAME
konfigurieren, um Duplikate und mehrere Werte für solche HTTP-Header auf den Nachrichtenprozessoren zuzulassen. Verwenden Sie dazu das entsprechende Token gemäß der Syntax, die unter Edge konfigurieren beschrieben wird.
In diesem Abschnitt verwenden wir Expires
(und myheader
) als Beispielheader, für den wir Duplikate und mehrere Werte zulassen möchten, wie unten erläutert:
-
Ermitteln Sie den aktuellen Wert des Attributs
HTTPHeaderHEADER_NAME
mit dem folgenden Befehl, um sicherzustellen, dass es nicht bereits aktiviert ist, um Duplikate und mehrere Werte zuzulassen:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise versuchen, das Attribut für den Header
Expires
festzulegen, prüfen Sie den aktuellen Wert des Property-TokensHTTPHeader.Expires
auf dem Message Processor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Die Ausgabe des obigen Befehls führt zu einem der folgenden Ereignisse:
- Das Attribut ist leer und impliziert, dass der Wert überschrieben wird (und dies ist ein Header mit bereits vorhandener Konfiguration), damit doppelte Header und mehrere Werte NICHT zulässig sind. Das heißt, Sie dürfen den
Expires
-Header nur einmal als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee senden. - Für das spezifische Attribut gibt es keine Treffer. Das bedeutet, dass der Wert nicht überschrieben wird (und dies ist KEIN Header mit einer bereits vorhandenen Konfiguration). Dies bedeutet, dass der spezifische Header mehr als einmal als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee Edge gesendet werden kann (Duplikate sind zulässig).
- Das Attribut wird auf den Wert
allowDuplicates, multivalued
gesetzt. Das bedeutet, dass der Wert explizit überschrieben wird(und dies ist ein Header mit bereits vorhandener Konfiguration). Dies bedeutet, dass der spezifische Header mehr als einmal als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee gesendet werden kann (Duplikate sind zulässig).
Beispielausgabe des Suchbefehls:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Die obige Beispielausgabe zeigt, dass das Attribut
HTTPHeader.Expires
leer ist. Das bedeutet, dass das Attribut überschrieben wird, um keine doppelten oder mehrere Werte für den HeaderExpires
zuzulassen. - Das Attribut ist leer und impliziert, dass der Wert überschrieben wird (und dies ist ein Header mit bereits vorhandener Konfiguration), damit doppelte Header und mehrere Werte NICHT zulässig sind. Das heißt, Sie dürfen den
- Wenn Sie feststellen, dass die Property für den jeweiligen Header explizit überschrieben wird, um keine doppelten oder mehrfachen Werte wie in der Beispielausgabe zuzulassen, führen Sie nur dann die folgenden Schritte aus. Wenn sie nicht explizit überschrieben wird, überspringen Sie die restlichen Schritte in diesem Abschnitt.
- Bearbeiten. Wenn er nicht vorhanden ist, können Sie ihn erstellen:
/opt/apigee/customer/application/message-processor.properties
Wenn Sie die Datei beispielsweise mit vi öffnen möchten, geben Sie Folgendes ein:
vi /opt/apigee/customer/application/message-processor.properties
- Fügen Sie eine Zeile im folgenden Format hinzu:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Speichern Sie die Änderungen.
Achten Sie darauf, dass der Inhaber der Attributdatei der Nutzer
apigee
ist. Ist dies nicht der Fall, führen Sie den folgenden Befehl aus:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Starten Sie den Message Processor neu:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Informationen zum Neustart ohne Auswirkungen auf den Traffic finden Sie unter Rollierender Neustart von Message Processors ohne Auswirkungen auf den Traffic.
- Wenn Sie mehr als einen Message Processor haben, wiederholen Sie die obigen Schritte für alle Message Processor.
Prüfen, ob der Header so konfiguriert ist, dass er Duplikate und mehrere Werte enthält
In diesem Abschnitt wird erläutert, wie Sie überprüfen können, ob die Eigenschaft HTTPHeader.HEADER_NAME
für einen bestimmten Header erfolgreich aktualisiert wurde, um Duplikate auf den Message Processorn zuzulassen.
Wir verwenden Expires
als Beispielheader und prüfen, ob das entsprechende Attribut HTTPHeader.Expires
aktualisiert wurde.
Obwohl Sie das Token conf_http_HTTPHeader.Expires
verwenden, um den Wert auf dem Message Processor zu aktualisieren, müssen Sie prüfen, ob die tatsächliche Eigenschaft HTTPHeader.Expires
mit dem neuen Wert festgelegt wurde.
- Suchen Sie auf dem Message Processor-Computer im Verzeichnis
/opt/apigee/edge-message-processor/conf
nach dem AttributHTTPHeader.HEADER_NAME
und prüfen Sie, ob es mit dem neuen Wert festgelegt wurde (siehe unten):grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise prüfen möchten, ob der neue Wert für das Attribut
HTTPHeader.Expires
festgelegt ist, führen Sie den folgenden Befehl aus:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Wenn der neue Wert für
HTTPHeader.HEADER_NAME
auf dem Message Processor festgelegt wurde, zeigt der obige Befehl den neuen Wert in der Dateihttp.properties
an. Das Beispielergebnis aus dem obigen Befehl sieht nach der Konfiguration von
allowDuplicates
undmultiValued
so aus:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- In der obigen Beispielausgabe wurde das Attribut
HTTPHeader.Expires
mit dem neuen WertallowDuplicates, multiValued
inhttp.properties
festgelegt. Dies weist darauf hin, dass das Zulassen von Duplikaten und mehreren Werten inHTTPHeader
erfolgreich auf dem Message Processor konfiguriert wurde. - Wenn noch der alte Wert für das Attribut
HTTPHeader.HEADER_NAME
angezeigt wird, prüfen Sie, ob Sie alle Schritte unter allowDuplicates und mehrere Werte für Header konfigurieren korrekt ausgeführt haben. Wenn Sie einen Schritt ausgelassen haben, wiederholen Sie alle Schritte korrekt.Achten Sie darauf, dass Ihre Proxys wie erwartet funktionieren, insbesondere wenn eine funktionale Logik zum Abrufen und Festlegen der Header im Proxy vorhanden ist.
- Wenn Sie die Eigenschaft immer noch nicht ändern können, wenden Sie sich an den Apigee Edge-Support.
„allowDuplicates“ für Header deaktivieren
In diesem Abschnitt wird erläutert, wie Sie das Attribut HTTPHeader.{Headername}
so konfigurieren, dass für einen bestimmten HTTP-Header auf den Nachrichtenprozessoren keine Duplikate und mehrere Werte zugelassen werden. Dazu wird das entsprechende Token gemäß der Syntax verwendet, die unter Edge konfigurieren beschrieben ist.
In diesem Abschnitt verwenden wir Expires
(und myheader
) als Beispielheader, für den wie unten erläutert keine Duplikate zugelassen werden sollen:
-
Bestimmen Sie den aktuellen Wert des Attributs
HTTPHeaderHEADER_NAME
. Achten Sie darauf, dass es nicht bereits deaktiviert ist, um Duplikate und mehrere Werte zuzulassen. Verwenden Sie dazu den folgenden Befehl:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise versuchen, das Attribut für den Header
Expires
festzulegen, prüfen Sie den aktuellen Wert des Property-TokensHTTPHeader.Expires
auf dem Message Processor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Die Ausgabe des obigen Befehls führt zu einem der folgenden Ereignisse:
- Das Attribut ist leer. Dies impliziert, dass der Wert mit NOT überschrieben wird, um doppelte Header und mehrere Werte zuzulassen. Das heißt, Sie dürfen den Header
Expires
nur einmal als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee senden. - Für das spezifische Attribut gibt es keine Treffer. Das bedeutet, dass der Wert nicht überschrieben wird und dies ein NOT-Header mit einer bereits vorhandenen Konfiguration ist. Dies bedeutet, dass der spezifische Header mehr als einmal als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee Edge gesendet werden kann (Duplikate sind zulässig).
- Das Attribut wird auf den Wert
allowDuplicates, multivalued
gesetzt. Das bedeutet, dass der Wert explizit überschrieben wird und dies eine vorhandene Konfiguration ist. Dies bedeutet jedoch, dass der spezifische Header mehr als einmal als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee gesendet werden kann (Duplikate sind zulässig).
Beispielausgabe 1
Beispielausgabe Nr. 1 des Suchbefehls:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
Die Beispielausgabe zeigt, dass das Attribut
HTTPHeader.Expires
aufallowDuplicates, multiValued
festgelegt ist. Das bedeutet, dass das Attribut überschrieben wird, um doppelte oder mehrere Werte für den HeaderExpires
zuzulassen.Beispielausgabe 2
Beispielbefehl und Ausgabe 2 des Suchbefehls
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Die Beispielausgabe zeigt keine Ausgabe. Dies impliziert, dass das Attribut
HTTPHeader.myheader
standardmäßig aufallowDuplicates, multiValued
festgelegt ist. Dies bedeutet auch, dass die Property für den Header „myheader“ nicht überschrieben wird. - Das Attribut ist leer. Dies impliziert, dass der Wert mit NOT überschrieben wird, um doppelte Header und mehrere Werte zuzulassen. Das heißt, Sie dürfen den Header
- Wenn Ihnen einer der folgenden Punkte angezeigt wird, führen Sie die restlichen Schritte in diesem Abschnitt aus:
- Das Attribut, das dem spezifischen Header entspricht, wird überschrieben, um Duplikate und mehrere Werte zuzulassen, wie in der Beispielausgabe 1 oben beschrieben (Header mit bereits vorhandener Konfiguration).
- Für das Attribut, das dem spezifischen Header entspricht, gibt es keine Treffer, wie in Beispielausgabe 2 oben beschrieben (kein Header mit bereits vorhandener Konfiguration).
Andernfalls können Sie die restlichen Schritte in diesem Abschnitt überspringen.
- Bearbeiten Sie die folgende Datei. Wenn er nicht vorhanden ist, können Sie ihn erstellen.
/opt/apigee/customer/application/message-processor.properties
Wenn Sie die Datei beispielsweise mit vi öffnen möchten, geben Sie Folgendes ein:
vi /opt/apigee/customer/application/message-processor.properties
- Fügen Sie der Eigenschaftendatei eine Zeile im folgenden Format hinzu:
Vorhandene Konfiguration
Szenario 1: Header mit bereits vorhandener Konfiguration:
conf_http_HTTPHeader.Expires=
Keine bereits vorhandene Konfiguration
Szenario 2: Kein Header mit bereits vorhandener Konfiguration:
conf/http.properties+HTTPHeader.myheader=
- Speichern Sie die Änderungen.
- Achten Sie darauf, dass der Inhaber der Attributdatei der Nutzer
apigee
ist. Ist dies nicht der Fall, führen Sie folgenden Befehl aus:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Starten Sie den Message Processor neu:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Informationen zum Neustart ohne Auswirkungen auf den Traffic finden Sie unter Rollierender Neustart von Message Processors ohne Auswirkungen auf den Traffic.
- Wenn Sie mehr als einen Message Processor haben, wiederholen Sie die obigen Schritte für alle Message Processor.
Prüfen, ob der Header so konfiguriert ist, dass keine Duplikate und mehrere Werte zulässig sind
In diesem Abschnitt wird erläutert, wie Sie überprüfen können, ob die Eigenschaft HTTPHeader.HEADER_NAME
für einen bestimmten Header erfolgreich aktualisiert wurde, um keine Duplikate auf den Message Processorn zuzulassen.
Wir verwenden Expires
(und myheader
) als Beispielheader und prüfen, ob die entsprechende Property HTTPHeader.Expires
(und HTTPHeader.myheader
) aktualisiert wurde.
Suchen Sie auf dem Message Processor-Computer im Verzeichnis
/opt/apigee/edge-message- processor/conf
nach der EigenschaftHTTPHeader.HEADER_NAME
und prüfen Sie, ob sie wie unten gezeigt mit dem neuen Wert festgelegt wurde:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise prüfen möchten, ob das Attribut
HTTPHeader.Expires
auf den neuen Wert gesetzt ist, können Sie den folgenden Befehl ausführen:Vorhandene Konfiguration
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Keine bereits vorhandene Konfiguration
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Wenn der neue HTTP-Header-Wert für
HTTPHeader.HEADER_NAME
I auf dem Message Processor erfolgreich festgelegt wurde, zeigt der obige Befehl den neuen Wert in der Dateihttp.properties
an. - Das Beispielergebnis des obigen Befehls sieht nach dem Deaktivieren von
allowDuplicates
so aus:Vorhandene Konfiguration
Szenario 1: Ablaufdatum (Header) (Header mit bereits vorhandener Konfiguration)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Keine bereits vorhandene Konfiguration
Szenario 2: myheader-Header (kein Header mit bereits vorhandener Konfiguration)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- In der obigen Beispielausgabe wurde das Attribut
HTTPHeader.Expires
( undHTTPHeader.myheader
) mit dem neuen Wert {blank}
inhttp.properties
festgelegt. Dies weist darauf hin, dass das Zulassen von Duplikaten und mehreren Werten für den spezifischen HTTP-HeaderExpires
(undmyheader
) auf dem Message Processor erfolgreich deaktiviert wurde. Wenn noch der alte Wert für das Attribut
HTTPHeader.Expires (or HTTPHeader.myheader)
angezeigt wird, prüfen Sie, ob Sie alle Schritte unter allowDuplicates und mehrere Werte für Header konfigurieren korrekt ausgeführt haben. Wenn Sie einen Schritt ausgelassen haben, wiederholen Sie alle Schritte korrekt.Achten Sie darauf, dass Ihre Proxys wie erwartet funktionieren, insbesondere wenn eine funktionale Logik zum Abrufen und Festlegen der Header im Proxy vorhanden ist.
- Wenn Sie die Eigenschaft immer noch nicht ändern können, wenden Sie sich an den Apigee Edge-Support.