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 Requestmit 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 Gatewaymit 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/confnach der Property- HTTPHeader., 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 Connectionwird überschrieben, darf aber Duplikate und mehrere Werte enthalten
- Die HTTP-Header HostundExpireswerden überschrieben und dürfen keine Duplikate und mehrere Werte enthalten.
- Der HTTP-Header Datewird überschrieben und darf Duplikate enthalten, aber nicht mehrere Werte
- Alle hier aufgeführten Header (Connection,Host,ExpiresundDateim 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=atest‑header=b | protocol.http. | test‑header=atest‑header=b | protocol.http. | test‑header=atest‑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_NAMEermitteln, 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, multiValuedfestgelegt 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.Expiresleer ist. Das bedeutet, dass die Property überschrieben wird, um Duplikate oder mehrere Werte für den HeaderExpireszu 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 - apigeesein. 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/confnach der PropertyHTTPHeader.HEADER_NAMEund 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.Expiresmit 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_NAMEfestgelegt wurde, zeigt der obige Befehl den neuen Wert in der Dateihttp.propertiesan.
- Das Beispielergebnis des Befehls oben, nachdem Sie - allowDuplicatesund- multiValuedkonfiguriert haben, sieht so aus:- /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued 
- In der Beispielausgabe oben wurde das Attribut HTTPHeader.Expiresinhttp.propertiesauf den neuen WertallowDuplicates, multiValuedfestgelegt. Das bedeutet, dass das Verhalten, das Duplikate und mehrere Werte inHTTPHeaderzulässt, im Message Processor erfolgreich konfiguriert wurde.
- Wenn Sie weiterhin den alten Wert für die Property HTTPHeader.HEADER_NAMEsehen, 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_NAMEund 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, multiValuedfestgelegt 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 1Beispielausgabe 1 des Befehls „search“: /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued Die Beispielausgabe zeigt, dass das Attribut HTTPHeader.ExpiresaufallowDuplicates, multiValuedgesetzt ist. Das bedeutet, dass die Property überschrieben wird, um doppelte oder mehrere Werte für den HeaderExpireszuzulassen.Beispielausgabe 2Beispielbefehl 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.myheaderstandardmäßig aufallowDuplicates, multiValuedgesetzt 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 KonfigurationSzenario 1: Header mit vorhandener Konfiguration: conf_http_HTTPHeader.Expires= Keine vorhandene KonfigurationSzenario 2: Keine Überschrift mit vordefinierter Konfiguration: conf/http.properties+HTTPHeader.myheader= 
- Speichern Sie die Änderungen.
- Der Inhaber der Properties-Datei muss der Nutzer apigeesein. 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/confnach der Property- HTTPHeader.HEADER_NAMEund 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.Expiresder 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_NAMEI im Nachrichtenprozessor erfolgreich festgelegt wurde, wird der neue Wert mit dem Befehl oben in der Dateihttp.propertiesangezeigt.
- Nach dem Deaktivieren von allowDuplicatessieht das Ergebnis des obigen Befehls so aus:Vorhandene KonfigurationSzenario 1: Expiration-Header (Header mit bereits vorhandener Konfiguration) /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= Keine vorhandene KonfigurationSzenario 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.propertiesfestgelegt 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.