<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Gemäß HTTP-Spezifikation <ph type="x-smartling-placeholder"></ph> RFC 7230, Abschnitt 3.2.2: Feldreihenfolge, erwartet Apigee Edge, dass die HTTP-Anfrage vom Client oder HTTP-Antwort vom Back-End-Server nicht denselben Header enthalten, der übergeben wird. mehrfach mit denselben oder unterschiedlichen Werten verwenden, es sei denn, für den spezifischen Titel gibt es eine Ausnahme und darf Duplikate enthalten.
Standardmäßig lässt Apigee Edge zu, dass Duplikate und mehrere Werte an die meisten HTTP- Header. Bestimmte Header, die in den Überschriften, die keine Duplikate und mehrere Werte enthalten dürfen. Beispiele:
- Sie erhalten
400 Bad Request
mit Fehlercodeprotocol.http.DuplicateHeader
, wenn der Client eine HTTP-Anfrage mit bestimmten oder mit mehreren Werten für die HTTP-Header, die haben Duplikate/mehrere Werte in Apigee Edge. - In ähnlicher Weise erhalten Sie
502 Bad Gateway
mit Fehlercodeprotocol.http.DuplicateHeader
, wenn der Backend-Server eine HTTP-Antwort mit oder mit mehreren Werten für die HTTP-Header, die nicht Dürfen Duplikate oder mehrere Werte in Apigee Edge haben
Die empfohlene Lösung zur Behebung dieser Fehler besteht darin, die Clientanwendung zu reparieren. und Backend-Server, damit sie keine doppelten Header senden und die Spezifikation einhalten <ph type="x-smartling-placeholder"></ph> RFC 7230, Abschnitt 3.2.2: Feldreihenfolge, wie in den folgenden Playbooks zur Fehlerbehebung erläutert:
- <ph type="x-smartling-placeholder"></ph> 400 Ungültige Anfrage – Doppelter Header
- <ph type="x-smartling-placeholder"></ph> 502 Bad Gateway – Doppelter Header
In einigen Fällen kann es jedoch sinnvoll sein, eine Ausnahme hinzuzufügen, um Duplikate und mehrere
-Werte für einige HTTP-Header. In solchen Fällen können Sie doppelte Überschriften und mehrere
Werte für einen bestimmten HTTP-Header fest, indem Sie das Attribut HTTPHeader.HEADER_NAME
unter
Message Processor-Ebene.
In diesem Dokument finden Sie Informationen zu dieser Property. Außerdem wird erläutert, wie Sie sie aktivieren, um die oben genannten Fehler zu vermeiden, und es werden Best Practices zum selben Thema beschrieben.
HTTP-Header-Eigenschaften, um Duplikate und mehrere Werte zuzulassen
Apigee Edge bietet die folgenden zwei Eigenschaften, um das Verhalten zu steuern, Duplikate und mehrere Werte für HTTP-Header. Beachten Sie, dass diese nur auf der Message Processor, die die Token-Syntax verwenden, die unter So konfigurieren Sie Edge
Property-Name | Beschreibung | Zulässige Werte |
---|---|---|
HTTPHeader.ANY |
Diese Eigenschaft gibt an, ob Duplikate oder mehrere Werte für alle HTTP- Header, einschließlich der benutzerdefinierten Header, die als Teil der HTTP-Anfrage vom Client oder von HTTP gesendet wurden Antwort, die vom Back-End-Server an Apigee Edge gesendet wurde. Standardwert:
|
|
|
Diese Eigenschaft wird verwendet, um das Verhalten eines bestimmten Headers zu überschreiben,
angegeben durch |
Wie oben. |
Header, die keine Duplikate und mehrere Werte enthalten dürfen
Wie bereits erläutert, ermöglicht Apigee Edge Duplikate und mehrere Werte für die meisten HTTP-
enthalten. Das liegt daran, dass die Eigenschaft HTTPHeader.ANY
konfiguriert mit dem Wert multivalued, allowDuplicate.
Konfiguration überschrieben
Bei einigen spezifischen Headern wird die Standardkonfiguration mit einem der folgenden Header überschrieben: Methoden:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
Durch diese Konfiguration wird das Standardverhalten nicht geändert. Das heißt, der spezifische Header darf Duplikate und mehrere Werte enthalten.
.HTTPHeader.HEADER_NAME=
Mit dieser Konfiguration wird das Standardverhalten geändert. Das heißt, der spezifische Header darf keine Duplikate und mehrere Werte enthalten.
Überschriften ermitteln, die keine Duplikate und mehrere Werte enthalten dürfen
In diesem Abschnitt wird beschrieben, wie Sie Folgendes erkennen:
- Die spezifischen Titel, die keine Duplikate und mehrere Werte enthalten dürfen die Einrichtung von Apigee Edge Private Cloud und
- Die spezifischen Header mit einer bereits vorhandenen Konfiguration
Suchen Sie auf dem Message Processor-Computer nach der Eigenschaft
HTTPHeader.
im/opt/apigee/edge-message-processor/conf
-Verzeichnis wie unten gezeigt: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:
<ph type="x-smartling-placeholder">
- </ph>
- Der HTTP-Header
Connection
wird überschrieben, darf aber Duplikate und mehrere Werte - Die HTTP-Header
Host
undExpires
werden überschrieben und dürfen keine Duplikate und mehrere Werte - Der HTTP-Header „
Date
“ wird überschrieben und darf Duplikate enthalten. aber nicht darf mehrere Werte haben - Alle hier angezeigten Titel (
Connection
,Host
,Expires
undDate
im Beispiel oben) werden in diesem Beispiel als Header mit bereits vorhandener Konfiguration bezeichnet. Dokument.
- 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, je nachdem, wie die HTTPHeader
-Eigenschaften sind
die in den Message Processors mit einem Beispiel-HTTPHeader
von
test-header
.
Anfrage | 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 |
Dann wird der Fehler |
aber dann wird das Originalformular an das Targeting 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 Attribute für Edge in der privaten Cloud, beschrieben in So konfigurieren Sie Edge
"allowDuplicates" und mehrere Werte für Überschriften konfigurieren
<ph type="x-smartling-placeholder">Wie unter HTTP-Header-Eigenschaften zum Zulassen von Duplikaten und
mehrere Werte vorhanden sind, impliziert der Wert der Eigenschaft HTTPHeader.ANY = allowDuplicates,
multivalued
, dass alle Header Duplikate und mehrere Werte in
Apigee Edge Es gibt jedoch bestimmte Header, deren Werte explizit überschrieben werden, damit
Doppelte Kopfzeilen oder mehrere Werte für thi mithilfe der -Eigenschaft zulassen
HTTPHeader.HEADER_NAME
In diesem Abschnitt wird erläutert, wie Sie die Property konfigurieren.
HTTPHeader.HEADER_NAME
, um Duplikate und mehrere Werte für beliebige zu erlauben
HTTP-Header in den Message Processors unter Verwendung des entsprechenden Tokens gemäß der Syntax
beschrieben unter So konfigurieren Sie Edge.
In diesem Abschnitt verwenden wir Expires
(und myheader
) als Beispiel
-Header, für den wir Duplikate und mehrere Werte zulassen möchten, wie unten erläutert:
- <ph type="x-smartling-placeholder"></ph>
Aktuellen Wert der Eigenschaft
HTTPHeaderHEADER_NAME
ermitteln um sicherzustellen, dass Duplikate und mehrere Werte nicht bereits mithilfe der Funktion folgenden Befehl: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 Property-HTTPHeader.Expires
-Tokens in der Nachricht Prozessor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Die Ausgabe des obigen Befehls führt zu einem der folgenden Ereignisse:
- Wird die Eigenschaft auf leer gesetzt, wird impliziert, dass der Wert überschrieben wird (und dies
ist ein Header mit bereits vorhandener Konfiguration, um doppelte Header und mehrere
Werte. Das heißt, Sie dürfen den
Expires
-Header nicht öfter als einmal im Rahmen der HTTP-Anfrage oder der HTTP-Antwort an Apigee. - Für diese Eigenschaft sind keine Treffer vorhanden, das heißt, der Wert ist nicht überschrieben (und dies ist KEIN Header mit einer bereits vorhandenen Konfiguration). Das bedeutet, dass der spezifische Header mehrmals gesendet werden kann (Duplikate sind zulässig), die HTTP-Anfrage oder HTTP-Antwort an Apigee Edge.
- Das Attribut wird auf den Wert
allowDuplicates, multivalued
festgelegt: Das bedeutet, dass der Wert explizit überschrieben wird(und dies ist ein Header mit bereits vorhandene Konfiguration). Das bedeutet, dass der spezifische Header mehr als einmal (Duplikate sind zulässig) als Teil der HTTP-Anfrage oder HTTP-Antwort an Apigee.
Beispielausgabe des Suchbefehls:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Die obige Beispielausgabe zeigt, dass das Attribut
HTTPHeader.Expires
auf leer. Das bedeutet, dass die Eigenschaft überschrieben wird, sodass kein Duplikat möglich ist. oder mehrere Werte für den HeaderExpires
. - Wird die Eigenschaft auf leer gesetzt, wird impliziert, dass der Wert überschrieben wird (und dies
ist ein Header mit bereits vorhandener Konfiguration, um doppelte Header und mehrere
Werte. Das heißt, Sie dürfen den
- Wenn Sie feststellen, dass die Eigenschaft, die der spezifischen Überschrift entspricht, ausdrücklich ist, überschrieben, damit keine doppelten oder mehrfachen Werte wie im Beispiel zulässig sind. führen Sie nur dann die folgenden Schritte aus. Wenn nicht explizit überschrieben. Überspringen Sie dann die restlichen Schritte in diesem Abschnitt.
- Bearbeiten. Wenn sie nicht vorhanden ist, können Sie sie erstellen:
/opt/apigee/customer/application/message-processor.properties
Um die Datei beispielsweise mit vi, 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 die Property-Datei dem Nutzer
apigee
gehört. 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 <ph type="x-smartling-placeholder"></ph> Rollierender Neustart von Message Processor ohne Auswirkungen auf den Traffic
- Wenn Sie mehr als einen Message Processor haben, wiederholen Sie die obigen Schritte für alle Message Processors.
Prüfen, ob der Header Duplikate und mehrere Werte enthält
<ph type="x-smartling-placeholder">
In diesem Abschnitt wird erläutert, wie Sie prüfen können, ob die Property
„HTTPHeader.HEADER_NAME
“ für eine bestimmte Überschrift wurde aktualisiert
Duplikate in den Message Processors zulässig sind.
Wir verwenden Expires
als Beispielheader und prüfen, ob das entsprechende Attribut
HTTPHeader.Expires
wurde aktualisiert.
Auch wenn Sie das Token conf_http_HTTPHeader.Expires
verwenden, um den Wert
dem Message Processor, müssen Sie überprüfen, ob die eigentliche Property HTTPHeader.Expires
auf den neuen Wert gesetzt wurde.
- Suchen Sie auf dem Message Processor-Computer nach der Eigenschaft
HTTPHeader.HEADER_NAME
in der/opt/apigee/edge-message-processor/conf
und prüfen Sie, ob dort wie unten dargestellt mit dem neuen Wert festgelegt:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie z. B. prüfen möchten, ob das Attribut
HTTPHeader.Expires
mit dem neuen Wert und führen Sie dann den folgenden Befehl aus:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Wenn der neue Wert für
HTTPHeader.HEADER_NAME
festgelegt wurde dann im Message Processor, wird mit dem obigen Befehl der neue Wert im Feldhttp.properties
-Datei. Das Beispielergebnis des obigen Befehls nach der Konfiguration
allowDuplicates
undmultiValued
sind so:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- In der obigen Beispielausgabe wurde das Attribut
HTTPHeader.Expires
festgelegt mit dem neuen WertallowDuplicates, multiValued
inhttp.properties
Dies deutet darauf hin, dass das Verhalten beim Zulassen von Duplikaten und mehrfachen Werte inHTTPHeader
wurden im Message Processor konfiguriert. - Wenn Sie noch den alten Wert für die Eigenschaft
HTTPHeader.HEADER_NAME
sehen, und bestätigen Sie, dass Sie alle Schritte ausgeführt haben, „allowDuplicates“ und mehrere Werte für Header korrekt konfigurieren. Wenn Sie einen Schritt verpasst haben, wiederholen Sie alle Schritte noch einmal richtig. <ph type="x-smartling-placeholder">Stellen Sie sicher, dass Ihre Proxys wie erwartet funktionieren, insbesondere wenn es eine funktionale Logik für die die Header im Proxy abrufen und festlegen.
- 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}
für
keine Duplikate und mehrfachen Werte für einen bestimmten HTTP-Header in der Nachricht zulassen
Prozessoren, die das entsprechende Token gemäß der Syntax verwenden, die unter
So konfigurieren Sie Edge.
In diesem Abschnitt verwenden wir Expires
(und myheader
) als Beispiel
-Header, für den wir keine Duplikate zulassen möchten, wie unten erläutert:
- <ph type="x-smartling-placeholder"></ph>
Aktuellen Wert der Eigenschaft
HTTPHeaderHEADER_NAME
ermitteln Um zu prüfen, ob Duplikate und mehrere Werte zulässig sind, nicht bereits deaktiviert mit dem folgenden Befehl:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise das Attribut für den
Expires
-Header festlegen möchten, aktivieren Sie den aktuellen Wert des Property-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:
- Wird die Eigenschaft auf leer gesetzt, ist dies impliziert, dass der Wert mit NOT überschrieben wird.
, um doppelte Header und mehrere Werte zuzulassen. Das heißt, Sie sind nicht berechtigt,
Den
Expires
-Header mehrmals als Teil der HTTP-Anfrage oder HTTP-Antwort zu Apigee. - Für diese Eigenschaft sind keine Treffer vorhanden, das heißt, der Wert ist nicht überschrieben. Dies ist ein NOT-Header mit einer bereits vorhandenen Konfiguration. Das bedeutet, dass der spezifische Header mehrmals gesendet werden kann (Duplikate sind zulässig) als Teil des HTTP-Anfrage oder HTTP-Antwort an Apigee Edge.
- Wenn das Attribut auf den Wert
allowDuplicates, multivalued
gesetzt ist, bedeutet, dass der Wert explizit überschrieben wird und dies eine vorhandene Konfiguration ist. Das bedeutet jedoch, dass der spezifische Header mehrmals gesendet werden kann (Duplikate im Rahmen der HTTP-Anfrage oder der HTTP-Antwort an Apigee.
Beispielausgabe 1
Beispielausgabe 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
. Das bedeutet, dass die Eigenschaft wird überschrieben, um doppelte oder mehrere Werte für den Header zuzulassen.Expires
Beispielausgabe 2
Beispielbefehl und Ausgabe Nr. 2 des Suchbefehls
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Die Beispielausgabe zeigt keine Ausgabe, was impliziert, dass die Eigenschaft
HTTPHeader.myheader
ist standardmäßig aufallowDuplicates, multiValued
gesetzt. Das bedeutet auch, dass die Property für den Header „myheader“ nicht überschrieben wird . - Wird die Eigenschaft auf leer gesetzt, ist dies impliziert, dass der Wert mit NOT überschrieben wird.
, um doppelte Header und mehrere Werte zuzulassen. Das heißt, Sie sind nicht berechtigt,
Den
- Wenn Ihnen eine der folgenden Situationen auffällt, führen Sie die restlichen Schritte in diesem Abschnitt aus:
<ph type="x-smartling-placeholder">
- </ph>
- Die Eigenschaft, die der spezifischen Überschrift entspricht, wird überschrieben, damit Duplikate und mehrere Werte wie in Beispielausgabe 1 oben (Header mit bereits vorhandene Konfiguration)
- Es gibt keine Treffer für die Eigenschaft, die dem spezifischen Header entspricht, wie in den Beispielausgabe 2 oben (keine Kopfzeile mit bereits vorhandener Konfiguration)
Andernfalls können Sie die restlichen Schritte in diesem Abschnitt überspringen.
- Bearbeiten Sie die folgende Datei. Wenn sie nicht vorhanden ist, können Sie sie erstellen.
/opt/apigee/customer/application/message-processor.properties
Um die Datei beispielsweise mit vi, 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 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 die Property-Datei dem Nutzer
apigee
gehört. Ist dies nicht der Fall, führen Sie Folgendes 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 <ph type="x-smartling-placeholder"></ph> Rollierender Neustart von Message Processor ohne Auswirkungen auf den Traffic
- Wenn Sie mehr als einen Message Processor haben, wiederholen Sie die obigen Schritte für alle Prozessoren.
Prüfen, ob der Header so konfiguriert ist, dass Duplikate und mehrere Werte nicht zulässig sind
In diesem Abschnitt wird erläutert, wie Sie prüfen können, ob die Property
„HTTPHeader.HEADER_NAME
“ für eine bestimmte Überschrift wurde aktualisiert
keine Duplikate in den Message Processors zulassen.
Wir verwenden Expires
(und myheader
) als Beispielheader und prüfen,
die entsprechende Eigenschaft HTTPHeader.Expires
(und
HTTPHeader.myheader
) wurde aktualisiert.
Suchen Sie auf dem Message Processor-Computer nach der Eigenschaft
HTTPHeader.HEADER_NAME
im Verzeichnis/opt/apigee/edge-message- processor/conf
und prüfen Sie, ob der neue Wert als (siehe unten):grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Wenn Sie beispielsweise prüfen möchten, ob das Attribut
HTTPHeader.Expires
mit den neuen Wert eingeben, 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 erfolgreich für
HTTPHeader.HEADER_NAME
Ich im Message Processor, dann oben wird der neue Wert in der Dateihttp.properties
angezeigt. - Das Beispielergebnis des obigen Befehls nach der Deaktivierung
allowDuplicates
ist so:Vorhandene Konfiguration
Szenario 1: Expiration-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=
- Beachten Sie in der obigen Beispielausgabe, dass das Attribut
HTTPHeader.Expires
( undHTTPHeader.myheader
) wurde mit dem neuen Wert {blank}
inhttp.properties
. Dies deutet darauf hin, dass das Verhalten beim Zulassen von Duplikaten und mehrere Werte für den spezifischen HTTP-HeaderExpires
(undmyheader
) wurde im Message Processor deaktiviert. Wenn immer noch der alte Wert für die Eigenschaft
<ph type="x-smartling-placeholder">HTTPHeader.Expires (or HTTPHeader.myheader)
angezeigt wird, überprüfe, ob du alle Schritte ausgeführt hast, die unter allowDuplicates und mehrere Werte für Header konfigurieren korrekt sind. Wenn Sie einen Schritt verpasst haben, wiederholen Sie alle Schritte noch einmal richtig.Achten Sie darauf, dass Ihre Proxys wie erwartet funktionieren, insbesondere wenn es eine funktionale Logik gibt um die Header im Proxy abzurufen und festzulegen.
- Wenn Sie die Eigenschaft immer noch nicht ändern können, wenden Sie sich an den Apigee Edge-Support.