Citrix ADC

Konfigurieren eines HTTP-Callouts

Bei der Konfiguration eines HTTP-Callouts geben Sie den Typ der Anforderung (HTTP oder HTTPS), das Ziel und das Format der Anforderung an. Das erwartete Format der Antwort und schließlich der Teil der Antwort, den Sie analysieren möchten.

Für das Ziel geben Sie entweder die IP-Adresse und den Port des HTTP-Callout-Agenten an. Oder betreiben Sie einen Lastenausgleich, einen Content Switching oder einen virtuellen Cache-Umleitungsserver, um die HTTP-Callout-Anforderungen zu verwalten.

Im ersten Fall werden die HTTP-Callout-Anfragen direkt an den HTTP-Callout-Agent gesendet. Im zweiten Fall werden die HTTP-Callout-Anfragen an die virtuelle IP-Adresse (VIP) des angegebenen virtuellen Servers gesendet. Der virtuelle Server verarbeitet die Anforderung auf die gleiche Weise, wie er eine Clientanforderung verarbeitet. Wenn Sie beispielsweise erwarten, dass viele Callouts generiert werden, können Sie Instanzen des HTTP-Callout-Agenten auf mehreren Servern konfigurieren, diese Instanzen (als Dienste) an einen virtuellen Lastausgleichsserver binden und dann den virtuellen Lastausgleichsserver in der HTTP-Callout-Konfiguration angeben. Der virtuelle Lastausgleichsserver gleicht dann die Last auf den konfigurierten Instanzen aus, wie durch den Lastausgleichsalgorithmus bestimmt.

Für das Format der HTTP-Callout-Anforderung können Sie die einzelnen Attribute der HTTP-Calloutanforderung (eine attributbasierte HTTP-Callout) angeben oder die gesamte HTTP-Callout-Anforderung als erweiterten Richtlinienausdruck (eine ausdrucksbasierte HTTP-Callout) angeben.

In der folgenden Tabelle werden die Elemente in einer HTTP-Callout-Richtlinie beschrieben:

Weitere Informationen finden Sie unter Policy-HttpCallout

Parameter Beschreibung
Name Name des Callouts, maximal 127 Zeichen
IP-Adresse und Port ( IP-Adresse/Port) oder Name des virtuellen Servers (vserver) IPv4- oder IPv6-Adresse des Servers, an den das Callout gesendet wird, oder ein Platzhalter und des Port auf dem Server, an den das Callout gesendet wird, oder ein Platzhalter. Oder der Name eines virtuellen Load Balancing-, Content Switching- oder Cache-Umleitungsservers mit einem Diensttyp von HTTP.
HTTP-Methode (HttpMethod) HTTP-Methode (HttpMethod). Methode, die in der HTTP-Anforderung verwendet wird, die dieser Callout sendet. Gültige Werte: GET oder POST. Standardwert: GET.
Host-Ausdruck (HostExpr) Host-Ausdruck (HostExpr). Erweiterter Textausdruck zum Konfigurieren des Host-Headers. Maximale Länge: 255 Der Ausdruck kann ein Literalwert sein oder ein erweiterter Ausdruck sein, der den Wert ableitet. Beispiele: “10.101.10.11”, “http.req.header (“Host”)”
URL-Stammausdruck (urlStemExpr) URL-Stammausdruck (urlStemExpr) Ein erweiterter Zeichenfolgenausdruck zum Generieren des URL-Stammes. Maximale Länge: 8191 Der Ausdruck kann eine literale Zeichenfolge oder ein Ausdruck sein, der den Wert ableitet. Beispiele: “” /mysite/index.html “” “http.req.url”
HTTP-Header (Header) HTTP-Header (Header). Erweiterter Textausdruck zum Einfügen von HTTP-Headern und deren Werten in die HTTP-Calloutanforderung. Geben Sie für jeden Header einen Wert an. Sie geben den Header-Namen als String und den Header-Wert als erweiterten Ausdruck an. Geben Sie die Header durch Leerzeichen getrennt an. Wie -Header cip (client.ip.src) hdr (http.req.header (“HDR”)). Die Anzahl der Header kann 8 betragen
Ausdruckbasierte Anfrage zum Senden an den Server (FullReqExpr) Exakte HTTP-Anforderung, die der Citrix ADC als erweiterter Ausdruck an 8191 Zeichen senden soll. Wenn Sie diesen Parameter angeben, müssen Sie die Argumente HttpMethod, HostExpr, urlStemExpr, Header und Parameter weglassen. Der Anforderungsausdruck wird durch das Feature eingeschränkt, in dem das Callout verwendet wird. Beispielsweise kann ein HTTP.RES-Ausdruck nicht in einer Richtlinienbank zur Anforderungszeit oder in einer TCP-Content Switching-Richtlinienbank verwendet werden.
Ausdruckbasierte Anfrage zum Senden an den Server (BodyExpr) Ein erweiterter Zeichenfolgenausdruck zum Generieren des Hauptkörpers der Anforderung. Der Ausdruck kann eine literale Zeichenfolge oder einen Ausdruck enthalten, der den Wert ableitet (z. B. client.ip.src). Schließt sich gegenseitig mit -FullReqExpr aus.
Parameter Erweiterter Ausdruck zum Einfügen von Abfrageparametern in die HTTP-Anforderung, die der Callout sendet. Geben Sie einen Wert für jeden Parameter an, den Sie konfigurieren. Wenn die Callout-Anfrage die GET-Methode verwendet, werden diese Parameter in die URL eingefügt. Wenn die Callout-Anfrage die POST-Methode verwendet, werden diese Parameter in den POST-Text eingefügt. Sie konfigurieren den Namen des Abfrageparameters als String und den Wert als erweiterten Ausdruck. Die Parameterwerte sind URL-codiert. Geben Sie die durch Leerzeichen getrennten Parameter wie ፦parameter name1 (“name1”) name2 (http.req.header (“hdr”)) an. Die maximal 8 Parameter können konfiguriert werden.
Rückgabetyp (ReturnType) Typ der Daten, die die Zielanwendung in der Antwort auf den Callout zurückgibt. Gültige Werte: TEXT: Behandeln Sie den zurückgegebenen Wert als Textzeichenfolge. NUM: Behandeln Sie den zurückgegebenen Wert als Zahl. BOOL: Behandelt den zurückgegebenen Wert als booleschen Wert. Hinweis: Sie können den Rückgabetyp nicht ändern, nachdem er festgelegt wurde.
Ausdruck zum Extrahieren von Daten aus der Antwort (ResultExPR) Erweiterter Ausdruck, der HTTP.RES-Objekte aus der Antwort auf die HTTP-Callout extrahiert. Die maximale Länge beträgt 8191. Die Operationen in diesem Ausdruck müssen mit dem Rückgabetyp übereinstimmen. Wenn Sie beispielsweise einen Rückgabetyp von Text konfigurieren, muss der Ergebnisausdruck ein textbasierter Ausdruck sein. Wenn der Rückgabetyp num ist, muss der Ergebnisausdruck (resultExpr) einen numerischen Wert ähnlich dem folgenden zurückgeben: “http.res.body (10000) .length” Hinweis: Wenn Sie manchmal einen Rückgabetyp von TEXT festlegen und das vom Server gesendete Ergebnis 16 KB überschreitet, kann der Ergebnisausdruck NULL zurückgeben. Wenn das Ergebnis beispielsweise eine verkettete Zeichenfolge ist, die 16 KB überschreitet.
Schema Die Art des Schemas für den Callout-Server. Beispiel: HTTP, https
CacheForSecs Dauer in Sekunden, für die die Callout-Antwort zwischengespeichert wird. Die zwischengespeicherten Antworten werden in einer integrierten Caching-Content-Gruppe namens “CalloutContentGroup” gespeichert. Wenn keine Dauer konfiguriert ist, werden die Callout-Antworten nur zwischengespeichert, es sei denn, eine normale Caching-Konfiguration wird verwendet, um sie zu zwischenspeichern. Dieser Parameter hat Vorrang vor jeder normalen Caching-Konfiguration, die sonst für diese Antworten gelten würde.

Hinweis: Die Appliance überprüft nicht die Gültigkeit der Anforderung. Sie müssen sicherstellen, dass es sich bei der Anfrage um eine gültige Anfrage handelt und keine vertraulichen Informationen enthält. Eine falsche oder unvollständige HTTP-Callout-Konfiguration führt zu einer Runtime-UNDEF-Bedingung, die keiner Aktion zugeordnet ist. Die UNDEF-Bedingung aktualisiert lediglich den Zähler Undefined Hits, wodurch Sie eine falsch konfigurierte HTTP-Callout beheben können. Die Appliance analysiert jedoch die HTTP-Callout-Anforderung, damit Sie bestimmte Citrix ADC-Funktionen für den Callout konfigurieren können. Dies kann zu einem HTTP-Callout führen, der sich selbst aufruft. Informationen zur Callout-Rekursion und wie Sie sie vermeiden können, finden Sie unter Vermeiden von HTTP-Callout-Rekursion.

Unabhängig davon, ob Sie HTTP-Anforderungsattribute oder einen Ausdruck verwenden, um das Format der HTTP-Callout-Anforderung zu definieren, müssen Sie das Format der Antwort vom HTTP-Callout-Agent und den Teil der Antwort angeben, den Sie auswerten möchten. Der Antworttyp kann ein boolescher Wert, eine Zahl oder Text sein. Nur basierend auf diesem Rückgabetyp können Sie die weiteren Ausdrucksmethoden für die Callout-Antwort verwenden. Wenn der Rückgabetyp eine Zahl ist, können Sie den zahlenbasierten Ausdruck für die Callout-Antwort verwenden. Der Teil der Antwort, den Sie auswerten möchten, wird durch einen Ausdruck angegeben. Wenn Sie beispielsweise angeben, dass die Antwort Text enthält, können HTTP.RES.BODY(<unit>) Sie angeben, dass die Appliance nur die ersten <unit>Bytes der Antwort des Callout-Agenten auswerten darf.

In der Befehlszeile erstellen Sie zunächst ein HTTP-Callout mit dem Befehl add. Wenn Sie ein Callout hinzufügen, werden alle Parameter auf den Standardwert NONE festgelegt, mit Ausnahme der HTTP-Methode, die auf den Standardwert GET festgelegt ist. Anschließend konfigurieren Sie die Parameter des mit dem Befehl set. Der Befehl set wird verwendet, um beide Arten von Callouts zu konfigurieren (attributsbasiert und ausdrucksbasiert). Der Unterschied liegt in den Parametern, die für die Konfiguration der beiden Arten von Callouts verwendet werden. Die folgenden Befehlszeilenanweisungen enthalten also einen set-Befehl zum Konfigurieren eines attributbasierten Callouts und einen set-Befehl zum Konfigurieren eines ausdrucksbasierten Callouts. Im Konfigurationsprogramm werden alle diese Konfigurationsaufgaben in einem einzigen Dialogfeld ausgeführt.

Hinweis: Bevor Sie ein HTTP-Callout in eine Richtlinie einfügen, können Sie alle konfigurierten Parameter mit Ausnahme des Rückgabetyps ändern. Sobald sich ein HTTP-Callout in einer Richtlinie befindet, können Sie einen Ausdruck, der in dem Callout konfiguriert ist, nicht vollständig ändern. Beispielsweise können Sie HTTP.REQ.HEADER (“myval”) nicht in CLIENT.IP.SRC ändern. Sie können die Operatoren und Argumente ändern, die an den Ausdruck übergeben werden. Sie können z. B. HTTP.REQ.HEADER("myVal1") in HTTP.REQ.HEADER("myVal2") oder HTTP.REQ.HEADER("myVal") in HTTP.REQ.HEADER("myVal").AFTER_STR(<string>) ändern. Wenn der Befehl set fehlschlägt, erstellen Sie eine HTTP-Callout.

Die HTTP-Callout-Konfiguration beinhaltet das Konfigurieren erweiterter Richtlinienausdrücke Weitere Informationen zum Konfigurieren erweiterter Richtlinienausdrücke finden Sie unter Konfigurieren des erweiterten Richtlinienausdrucks: Erste Schritte.

So konfigurieren Sie ein HTTP-Callout mit der Befehlszeilenschnittstelle

Führen Sie an der Eingabeaufforderung die folgenden Schritte aus:

Erstellen Sie ein HTTP-Callout.

add policy httpCallout <name> [-IPAddress <ip_addr|ipv6_addr>] [-port<port>] [-vServer <string>] [-returnType <returnType>] [-httpMethod (GET | POST )] [-hostExpr <expression>]  [-urlStemExpr <expression>] [-headers <name(value)> ...] [-parameters <name(value)> ...] [-bodyExpr <expression>] [-fullReqExpr <expression>] [-scheme ( http | https )] [-resultExpr <expression>] [-cacheForSecs <secs>] [-comment <string>]

<!--NeedCopy-->

Beispiel:


add policy httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req.url" -parameters Name("My Name") -headers Name("MyHeader")-resultExpr "http.res.body(10000).length"

<!--NeedCopy-->

Ändern Sie die HTTP-Callout-Konfiguration.

set policy httpCallout <name> [-IPAddress <ip_addr|ipv6_addr|\*>] [-port <port|\*>] [-vServer <string>] [-returnType <returnType>] [-httpMethod ( GET | POST )] [-hostExpr <string>] [-urlStemExpr <string>] [-headers <name(value)> ...] [-parameters <name(value)> ...] [-resultExpr <string>]

<!--NeedCopy-->

Beispiel:

> set policy httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req.url" -parameters Name("My Name") -headers Name("MyHeader") -resultExpr "http.res.body(10000).length"
<!--NeedCopy-->

Konfigurieren Sie die HTTP-Callout mit dem FullReqExpr-Parameter.

set policy httpCallout <name> [-vServer <string>] [-returnType <returnType>] [-fullReqExpr <string>] [-resultExpr <string>]
<!--NeedCopy-->

Beispiel:


> set policy httpCallout mycallout1 -vserver lbv1 -returnType num fullReqExpr q{"GET " + http.req.url + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1) + "r\nHost:10.101.10.10\r\nAccept: \*/\*\r\n\r\n"}

<!--NeedCopy-->

Überprüfen Sie die Konfigurationen des HTTP-Callout.


show policy httpCallout `<name>`

sh policy httpCallout mycallout1
> Name: mycallout1
>Vserver: lbv1 (UP)
Effective Vserver state: UP
Return type: TEXT
Scheme: HTTP
Full REQ expr: "GET " + http.req.url + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1)+ "r\nHost:10.101.10.10\r\nAccept: \*/\*\r\n\r\n"
Result expr: http.res.body(100)
Hits: 0
Undef Hits: 0
Done
>

<!--NeedCopy-->

So konfigurieren Sie ein HTTP-Callout mit dem Konfigurationsdienstprogramm

  1. Navigieren Sie zu AppExpert > HTTP-Callouts.
  2. Klicken Sie im Detailbereich auf Hinzufügen.
  3. Konfigurieren Sie im Dialogfeld HTTP-Callout erstellen die Parameter des HTTP-Callouts. Um eine Beschreibung des Parameters zu erhalten, bewegen Sie den Mauszeiger über das Kontrollkästchen.
  4. Klicken Sie auf Create und dann auf Close. Konfigurieren einer HTTP-Callout
Konfigurieren eines HTTP-Callouts