<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Die HTTP-Header sind die Name/Wert-Paare, mit denen die Client-Anwendungen und Back-End-Dienste um zusätzliche Informationen zu Anfragen bzw. Antworten zu übergeben. Hier einige einfache Beispiele:
- Der Header der Autorisierungsanfrage sendet die Anmeldedaten an den Server:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
- Der Header
Content-Type
gibt den Typ des gesendeten Anfrage-/Antwortinhalts an:Content-Type: application/json
Die HTTP-Header können je nach den Headerfelddefinitionen einen oder mehrere Werte haben. Ein Header mit mehreren Werten enthält kommagetrennte Werte. Beispiele für Header mit mehreren Werten:
Cache-Control: no-cache, no-store, must-revalidate
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
X-Forwarded-For: 10.125.5.30, 10.125.9.125
Mit Apigee Edge können Entwickler ganz einfach auf Header zugreifen, indem sie Flow-Variablen in allen Edge-Richtlinien oder bedingten Abläufen. Die folgenden Variablen können verwendet werden: um auf einen bestimmten Anfrage- oder Antwort-Header in Edge zuzugreifen:
Ablaufvariablen:
message.header.header-name
request.header.header-name
response.header.header-name
message.header.header-name.N
request.header.header-name.N
response.header.header-name.N
JavaScript-Objekte:
context.proxyRequest.headers.header-name
context.targetRequest.headers.header-name
context.proxyResponse.headers.header-name
context.targetResponse.headers.header-name
Hier ist ein Beispiel für eine AssignMessage-Richtlinie, die zeigt, wie ein Wert eines Anfrageheaders gelesen und in einer Variablen gespeichert wird:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <AssignVariable> <Name>reqUserAgent</Name> <Ref>request.header.User-Agent</Ref> </AssignVariable> </AssignMessage>
Anti-Pattern
Auf die Werte von HTTP-Headern in Edge-Richtlinien so zugreifen, dass nur der erste Wert zurückgegeben wird ist falsch und kann Probleme verursachen, wenn die spezifischen HTTP-Header mehr als einen Wert haben.
Die folgenden Abschnitte enthalten Beispiele für den Headerzugriff.
Beispiel 1: Header mit mehreren Werten mit JavaScript-Code lesen
Beachten Sie, dass der Header Accept
mehrere Werte hat, wie unten gezeigt:
Accept: text/html, application/xhtml+xml, application/xml
Hier ist der JavaScript-Code, mit dem der Wert des Headers Accept
gelesen wird:
// Read the values from Accept header var acceptHeaderValues = context.getVariable("request.header.Accept");
Der obige JavaScript-Code gibt nur den ersten Wert des Headers Accept
zurück, z. B. text/html
.
Beispiel 2: Mehrwertiger Header "Access-Control-Allow-Headers" in der Richtlinie "AssignedMessage" oder "RaiseFault" lesen
Beachten Sie, dass der Header Access-Control-Allow-Headers
mehrere Werte hat, wie unten gezeigt:
Access-Control-Allow-Headers: content-type, authorization
Folgendes ist ein Teil des Codes aus der Richtlinie "AssignMessage" oder "Raisefault" für die Einstellung des Headers Access-Control-Allow-Headers
:
<Set> <Headers> <Header name="Access-Control-Allow-Headers">{request.header.Access-Control-Request-Headers}</Header> </Headers> </Set>
Der obige Code legt den Header Access-Control-Allow-Headers
mit dem ersten Wert aus dem Anfrageheader Access-Control-Allow-Headers
fest, in diesem Beispiel content-type
.
Auswirkungen
- Beachten Sie in beiden Beispielen, dass nur der erste Wert von Headern mit mehreren Werten zurückgegeben wird. Wenn diese Werte anschließend von einer anderen Richtlinie im API-Proxy-Ablauf oder vom Back-End-Dienst zum Ausführen einer Funktion oder Logik verwendet werden, kann dies zu einem unerwarteten Ergebnis führen.
- Wenn auf die Anfrageheaderwerte zugegriffen wird und diese an den Zielserver gesendet werden, werden API-Anfragen möglicherweise vom Back-End falsch verarbeitet und können daher fehlerhafte Ergebnisse liefern.
- Wenn die Client-Anwendung von bestimmten Header-Werten aus der Edge-Antwort abhängig ist, kann auch falsch verarbeitet werden und zu falschen Ergebnissen führen.
Best Practice
Verwenden Sie die entsprechenden integrierten Ablaufvariablen:
request.header.header_name.values.count
,request.header.header_name.N
,response.header.header_name.values.count
,response.header.header_name.N
.Wiederholen Sie dann den Vorgang, um alle Werte aus einem bestimmten Header in JavaScript- oder Java-Callout-Richtlinien abzurufen.
Beispiel: JavaScript-Code zum Lesen eines Headers mit mehreren Werten
for (var i = 1; i <=context.getVariable('request.header.Accept.values.count'); i++) { print(context.getVariable('request.header.Accept.' + i)); }
Beispiel:
application/xml;q=0.9, */*;q=0.8
wird mit dem obigen Code als ein einziger Wert angezeigt.Wenn die Headerwerte durch Semikolons getrennt werden müssen, trennen Sie sie mit
string.split(";")
in Werte.Zum Lesen aller Werte eines bestimmten Headers verwenden Sie die Funktion
substring()
für die Ablaufvariablerequest.header.header_name.values
in der RaiseFault- oder AssignMessage-Richtlinie.Beispiel: Beispiel für RaiseFault- oder AssignMessage-Richtlinie zum Lesen eines mehrwertigen Headers
<Set> <Headers> <Header name="Access-Control-Allow-Headers">{substring(request.header.Access-Control-Request-Headers.values,1,-1)}</Header> </Headers> </Set>