Sie sehen sich die Dokumentation zu Apigee Edge an.
Sehen Sie sich die Apigee X-Dokumentation an. info
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 Backend-Server nicht denselben Header mehrmals mit denselben oder unterschiedlichen Werten enthalten, es sei denn, für den jeweiligen Header gilt eine Ausnahme und es sind Duplikate zulässig.
Standardmäßig erlaubt Apigee Edge, dass Duplikate und mehrere Werte an die meisten HTTP-Header übergeben werden. 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 mehrmals oder mit mehreren Werten für die HTTP-Header sendet, die in Apigee Edge keine Duplikate/mehrere Werte enthalten dürfen. - Ebenso erhalten Sie
502 Bad Gateway
mit dem Fehlercodeprotocol.http.DuplicateHeader
, wenn der Backend-Server eine HTTP-Antwort mit einem bestimmten Header mehrmals 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 für diese Fehler besteht darin, die Clientanwendung und den Backend-Server so zu konfigurieren, dass keine doppelten Header gesendet werden und die Spezifikation RFC 7230, Abschnitt 3.2.2: Feldreihenfolge eingehalten wird. Weitere Informationen finden Sie in den folgenden Playbooks zur Fehlerbehebung:
In einigen Fällen kann es jedoch sinnvoll sein, eine Ausnahme hinzuzufügen, um Duplikate und mehrere Werte für einige HTTP-Header zuzulassen. In solchen Fällen können Sie doppelte Header und mehrere Werte für einen bestimmten HTTP-Header zulassen, indem Sie auf Ebene des Nachrichten-Prozessors eine Eigenschaft HTTPHeader.HEADER_NAME
festlegen.
In diesem Dokument wird erläutert, wie Sie diese Property aktivieren, um die oben genannten Fehler zu vermeiden, und es werden Best Practices vorgestellt.
HTTP-Header-Eigenschaften, die Duplikate und mehrere Werte zulassen
Apigee Edge bietet die folgenden beiden Eigenschaften, um das Verhalten zu steuern, mit dem Duplikate und mehrere Werte für HTTP-Header zulässig sind. Hinweis: Diese können nur auf den Message Processors mithilfe der Tokensyntax konfiguriert werden, die im Hilfeartikel 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 im Rahmen der HTTP-Anfrage des Clients oder der HTTP-Antwort gesendet werden, die vom Backend-Server an Apigee Edge gesendet wird. Standardwert:
|
|
|
Mit diesem Attribut wird das Verhalten eines bestimmten Headers überschrieben, was in |
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. Das liegt daran, dass die Property HTTPHeader.ANY
mit dem Wert multiValued, allowDuplicates.
konfiguriert ist.
Konfiguration überschrieben
Bei einigen bestimmten Überschriften wird die Standardkonfiguration mit einer der folgenden Methoden überschrieben:
HTTPHeader.HEADER_NAME=multiValued, allowDuplicates
Durch diese Konfiguration wird das Standardverhalten nicht geändert. Das bedeutet, dass für den jeweiligen Header Duplikate und mehrere Werte zulässig sind.
.HTTPHeader.HEADER_NAME=
Durch diese Konfiguration wird das Standardverhalten geändert. Das heißt, der spezifische Header dürfen keine Duplikate und mehrere Werte enthalten.
Header bestimmen, die keine Duplikate und mehrere Werte haben dürfen
In diesem Abschnitt wird beschrieben, wie Sie Folgendes erkennen:
- Die spezifischen Header, die in Ihrer Apigee Edge Private Cloud-Umgebung keine Duplikate und mehrere Werte haben dürfen , und
- Die spezifischen Header mit einer bereits vorhandenen Konfiguration
Suche auf dem Message Processor-Rechner im Verzeichnis
/opt/apigee/edge-message-processor/conf
nach der PropertyHTTPHeader.
, wie unten dargestellt: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, sind in der Beispielausgabe oben folgende Informationen zu beachten:
- 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, aber nicht mehrere Werte - Alle hier aufgeführten Header (
Connection
,Host
,Expires
undDate
im Beispiel oben) 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 in den Message Processors konfiguriert werden. Als Beispiel wird für HTTPHeader
der Wert test-header
verwendet.
Anfrage | Ausgehende HEADER basierend auf dem Wert von conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Leer> | allowDuplicates | multiValued | allowDuplicates, multiValued (DEFAULT) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Intern unterteilen wir
und dann wird der Fehler |
Das ursprüngliche Formular wird dann 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 ausführen, sollten Sie sich mit der Konfiguration von Properties für Edge in der Private Cloud vertraut machen. Weitere Informationen finden Sie unter Edge konfigurieren.
„allowDuplicates“ und mehrere Werte für Überschriften konfigurieren
Wie unter HTTP-Header-Properties, die Duplikate und mehrere Werte zulassen erläutert, bedeutet der Wert der Property HTTPHeader.ANY = allowDuplicates,
multiValued
, dass alle Header in Apigee Edge Duplikate und mehrere Werte haben dürfen. Es gibt jedoch bestimmte Überschriften, deren Werte explizit überschrieben werden, um doppelte Überschriften oder mehrere Werte für „Dieses Jahr“ mithilfe der Property HTTPHeader.HEADER_NAME
zu verhindern.
In diesem Abschnitt wird beschrieben, wie Sie die Property HTTPHeader.HEADER_NAME
so konfigurieren, dass Duplikate und mehrere Werte für alle entsprechenden HTTP-Header in den Nachrichten-Prozessoren zulässig sind. Verwenden Sie dazu das entsprechende Token gemäß der Syntax, die im Hilfeartikel Edge konfigurieren beschrieben wird.
In diesem Abschnitt verwenden wir Expires
(und myheader
) als Beispiel für einen Header, für den wir Duplikate und mehrere Werte zulassen möchten, wie unten erläutert:
-
Aktuellen Wert der Property
HTTPHeaderHEADER_NAME
ermitteln, um sicherzustellen, dass Duplikate und mehrere Werte nicht bereits zulässig sind. Verwenden Sie dazu den folgenden Befehl:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise die Property für den
Expires
-Header festlegen möchten, prüfen Sie den aktuellen Wert des Property-HTTPHeader.Expires
-Tokens im Nachrichtenprozessor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Die Ausgabe des Befehls führt zu einer der folgenden Optionen:
- Wenn das Attribut auf ein leeres Feld gesetzt ist, wird impliziert, dass der Wert überschrieben wird (dies ist ein Header mit bereits vorhandener Konfiguration), damit KEINE doppelten Header und mehrere Werte zulässig sind. Das heißt, Sie dürfen den
Expires
-Header nicht mehrmals als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee senden. - Wenn es keine Treffer für die jeweilige Property gibt, wird der Wert nicht überschrieben. Es handelt sich also NICHT um einen Header mit einer vorhandenen Konfiguration. Das bedeutet, dass der spezifische Header mehrmals als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee Edge gesendet werden kann (Duplikate sind zulässig).
- Wenn die Property mit dem Wert
allowDuplicates, multiValued
festgelegt ist, wird der Wert explizit überschrieben . Es handelt sich dabei um einen Header mit vorhandener Konfiguration. Das bedeutet, dass der spezifische Header als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee mehrmals 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 die Property
HTTPHeader.Expires
leer ist. Das bedeutet, dass die Property überschrieben wird, um Duplikate oder mehrere Werte für den HeaderExpires
zu verhindern. - Wenn das Attribut auf ein leeres Feld gesetzt ist, wird impliziert, dass der Wert überschrieben wird (dies ist ein Header mit bereits vorhandener Konfiguration), damit KEINE doppelten Header und mehrere Werte zulässig sind. Das heißt, Sie dürfen den
- Wenn Sie feststellen, dass die dem jeweiligen Header entsprechende Property ausdrücklich überschrieben wird, um Duplikate oder mehrere Werte zu verhindern, wie in der Beispielausgabe oben, 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 sie nicht vorhanden ist, können Sie sie 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.
Der Inhaber der Properties-Datei muss der Nutzer
apigee
sein. Falls nicht, 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 Rollback-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 Duplikate und mehrere Werte enthält
In diesem Abschnitt wird beschrieben, wie Sie prüfen, ob die Property HTTPHeader.HEADER_NAME
für einen bestimmten Header erfolgreich aktualisiert wurde, um Duplikate in den Nachrichten-Prozessoren zuzulassen.
Wir verwenden Expires
als Beispiel für eine Überschrift und prüfen, ob die entsprechende Property HTTPHeader.Expires
aktualisiert wurde.
Auch wenn Sie das Token conf_http_HTTPHeader.Expires
verwenden, um den Wert im Message Processor zu aktualisieren, müssen Sie prüfen, ob die tatsächliche Property HTTPHeader.Expires
mit dem neuen Wert festgelegt wurde.
- Suche auf dem Message Processor-Rechner im Verzeichnis
/opt/apigee/edge-message-processor/conf
nach der PropertyHTTPHeader.HEADER_NAME
und prüfe, 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 die Property
HTTPHeader.Expires
mit dem neuen Wert festgelegt ist, führen Sie den folgenden Befehl aus:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Wenn der neue Wert im Message Processor für
HTTPHeader.HEADER_NAME
festgelegt wurde, zeigt der obige Befehl den neuen Wert in der Dateihttp.properties
an. Das Beispielergebnis des Befehls oben, nachdem Sie
allowDuplicates
undmultiValued
konfiguriert haben, sieht so aus:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- In der Beispielausgabe oben wurde das Attribut
HTTPHeader.Expires
inhttp.properties
auf den neuen WertallowDuplicates, multiValued
festgelegt. Das bedeutet, dass das Verhalten, das Duplikate und mehrere Werte inHTTPHeader
zulässt, im Message Processor erfolgreich konfiguriert wurde. - Wenn Sie weiterhin den alten Wert für die Property
HTTPHeader.HEADER_NAME
sehen, prüfen Sie, ob Sie alle Schritte unter „allowDuplicates“ und mehrere Werte für Überschriften konfigurieren korrekt ausgeführt haben. Wenn Sie einen Schritt übersprungen haben, wiederholen Sie alle Schritte noch einmal.Prüfen Sie, ob Ihre Proxys wie erwartet funktionieren, insbesondere wenn es eine funktionale Logik zum Abrufen und Festlegen der Header im Proxy gibt.
- Wenn Sie die Property weiterhin nicht ändern können, wenden Sie sich an den Apigee Edge-Support.
Deaktivierung von „allowDuplicates“ für Header
In diesem Abschnitt wird erläutert, wie Sie das Attribut HTTPHeader.{Headername}
so konfigurieren, dass keine Duplikate und mehrere Werte für einen bestimmten HTTP-Header in den Message Processors zulässig sind. Dabei wird das entsprechende Token gemäß der unter Edge konfigurieren beschriebenen Syntax verwendet.
In diesem Abschnitt verwenden wir Expires
(und myheader
) als Beispiel für einen Header, für den wir wie unten erläutert keine Duplikate zulassen möchten:
-
Ermitteln Sie den aktuellen Wert des Attributs
HTTPHeaderHEADER_NAME
und achten Sie darauf, dass es nicht bereits deaktiviert ist, um Duplikate und mehrere Werte mit dem folgenden Befehl zuzulassen:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise versuchen, das Attribut für den
Expires
-Header festzulegen, prüfen Sie den aktuellen Wert des Attribut-HTTPHeader.Expires
-Tokens im Message Processor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Die Ausgabe des obigen Befehls führt zu einem der folgenden Ereignisse:
- Wenn die Property leer ist, wird der Wert überschrieben, um doppelte Überschriften und mehrere Werte zuverhindern. Das heißt, Sie dürfen den
Expires
-Header nur einmal im Rahmen der HTTP-Anfrage oder der HTTP-Antwort an Apigee senden. - Wenn es keine Treffer für die jeweilige Property gibt, wird der Wert nicht überschrieben und es handelt sich um einen NOT-Header mit einer vorhandenen Konfiguration. Das bedeutet, dass der spezifische Header mehrmals als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee Edge gesendet werden kann (Duplikate sind zulässig).
- Wenn das Attribut auf den Wert
allowDuplicates, multiValued
festgelegt ist, bedeutet dies, dass der Wert explizit überschrieben wird und dies eine vorhandene Konfiguration ist. Dies bedeutet jedoch, dass der spezifische Header mehrmals als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee gesendet werden kann (Duplikate sind zulässig).
Beispielausgabe 1
Beispielausgabe 1 des Befehls „search“:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
Die Beispielausgabe zeigt, dass das Attribut
HTTPHeader.Expires
aufallowDuplicates, multiValued
gesetzt ist. Das bedeutet, dass die Property überschrieben wird, um doppelte oder mehrere Werte für den HeaderExpires
zuzulassen.Beispielausgabe 2
Beispielbefehl und -ausgabe 2 des Befehls „search“
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Die Beispielausgabe enthält keine Ausgabe. Das bedeutet, dass die Eigenschaft
HTTPHeader.myheader
standardmäßig aufallowDuplicates, multiValued
gesetzt ist. Das bedeutet auch, dass die Property nicht überschrieben wird für den Header „myheader“. - Wenn die Property leer ist, wird der Wert überschrieben, um doppelte Überschriften und mehrere Werte zuverhindern. Das heißt, Sie dürfen den
- Wenn einer der folgenden Punkte zutrifft, führen Sie die restlichen Schritte in diesem Abschnitt aus:
- Die dem jeweiligen Header entsprechende Property wird überschrieben, um Duplikate und mehrere Werte zuzulassen, wie in Beispielausgabe 1 oben (Header mit vorhandener Konfiguration).
- Es gibt keine Treffer für die Property, die dem spezifischen Header entspricht, wie in Beispielausgabe 2 oben (kein Header mit vorhandener Konfiguration)
Andernfalls überspringen Sie die restlichen Schritte in diesem Abschnitt.
- Bearbeiten Sie die folgende Datei. Wenn er nicht vorhanden ist, können Sie ihn erstellen.
/opt/apigee/customer/application/message-processor.properties
Geben Sie beispielsweise Folgendes ein, um die Datei mit vi zu öffnen:
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 vorhandener Konfiguration:
conf_http_HTTPHeader.Expires=
Keine vorhandene Konfiguration
Szenario 2: Keine Überschrift mit vordefinierter Konfiguration:
conf/http.properties+HTTPHeader.myheader=
- Speichern Sie die Änderungen.
- Der Inhaber der Properties-Datei muss der Nutzer
apigee
sein. 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 Rollback-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 beschrieben, wie Sie prüfen, ob die Property HTTPHeader.HEADER_NAME
für einen bestimmten Header erfolgreich aktualisiert wurde, damit keine Duplikate in den Message Processors zulässig sind.
Wir verwenden Expires
(und myheader
) als Beispielheader und prüfen, ob die entsprechende Property HTTPHeader.Expires
(und HTTPHeader.myheader
) aktualisiert wurde.
Suche auf dem Message Processor-Rechner im Verzeichnis
/opt/apigee/edge-message- processor/conf
nach der PropertyHTTPHeader.HEADER_NAME
und prüfe, 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 für das Attribut
HTTPHeader.Expires
der neue Wert festgelegt 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-Headerwert für
HTTPHeader.HEADER_NAME
I im Nachrichtenprozessor erfolgreich festgelegt wurde, wird der neue Wert mit dem Befehl oben in der Dateihttp.properties
angezeigt. - Nach dem Deaktivieren von
allowDuplicates
sieht das Ergebnis des obigen Befehls so aus:Vorhandene Konfiguration
Szenario 1: Expiration-Header (Header mit bereits vorhandener Konfiguration)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Keine vorhandene Konfiguration
Szenario 2: myheader-Header (kein Header mit bereits vorhandener Konfiguration)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- In der Beispielausgabe oben ist zu sehen, dass das Attribut
HTTPHeader.Expires
( undHTTPHeader.myheader
) auf den neuen Wert {blank}
inhttp.properties
festgelegt wurde. Dies weist darauf hin, dass das Zulassen von Duplikaten und mehreren Werten für den spezifischen HTTP-HeaderExpires
(undmyheader
) im Message Processor erfolgreich deaktiviert ist. Wenn weiterhin der alte Wert für die Property
HTTPHeader.Expires (or HTTPHeader.myheader)
angezeigt wird, prüfen Sie, ob Sie alle Schritte unter „allowDuplicates“ und mehrere Werte für Überschriften konfigurieren korrekt ausgeführt haben. Wenn Sie einen Schritt übersprungen haben, wiederholen Sie alle Schritte noch einmal.Prüfen Sie, ob Ihre Proxys wie erwartet funktionieren, insbesondere wenn es eine funktionale Logik zum Abrufen und Festlegen der Header im Proxy gibt.
- Wenn Sie die Property weiterhin nicht ändern können, wenden Sie sich an den Apigee Edge-Support.