ADC

Invocation d’une légende HTTP

Après avoir configuré une légende HTTP, vous l’appelez en incluant l’SYS.HTTP_CALLOUT(<name>)expression dans une règle de stratégie de syntaxe par défaut. Dans cette expression,<name> est le nom de la légende HTTP que vous souhaitez appeler.

Vous pouvez utiliser les opérateurs d’expression de syntaxe par défaut avec l’expression de légende pour traiter la réponse, puis effectuer une action appropriée. Le type de retour de la réponse à partir de l’agent de légende HTTP détermine l’ensemble d’opérateurs que vous pouvez utiliser sur la réponse. Si la partie de la réponse que vous souhaitez analyser est du texte, vous pouvez utiliser un opérateur de texte pour analyser la réponse. Par exemple, vous pouvez utiliser l’opérateur CONTAINS(<string>) pour vérifier si la partie spécifiée de la réponse contient une chaîne particulière, comme dans l’exemple suivant :

SYS.HTTP_CALLOUT(mycallout).contains("Good IP address")
<!--NeedCopy-->

Si vous utilisez l’expression précédente dans une stratégie de répondeur, vous pouvez configurer une action de répondeur appropriée.

De même, si la partie de la réponse que vous souhaitez évaluer est un nombre, vous pouvez utiliser un opérateur numérique tel que GT (int). Si la réponse contient une valeur booléenne, vous pouvez utiliser un opérateur booléen.

Remarque : Une légende HTTP peut s’appeler récursivement. La récursion de légende HTTP peut être évitée en combinant l’expression de légende HTTP avec une expression de syntaxe par défaut qui empêche la récursion. Pour plus d’informations sur la façon d’éviter la récursion de légende HTTP, reportez-vous à la section Éviter la récursion des légendes HTTP.

Vous pouvez également mettre en cascade les légendes HTTP en configurant des stratégies qui appellent chacune une légende après avoir évalué les légendes générées précédemment. Dans ce scénario, après qu’une stratégie appelle une légende, lorsque l’appliance Citrix ADC analyse la légende avant d’envoyer la légende au serveur de légende, un second ensemble de stratégies peut évaluer la légende et appeler des légendes supplémentaires, qui peuvent à son tour être évaluées par un troisième ensemble de stratégies, etc. Une telle implémentation est décrite dans l’exemple suivant.

Tout d’abord, vous pouvez configurer une légende HTTP appelée myCallout1, puis configurer une stratégie de répondeur, Pol1, pour appeler myCallout1. Ensuite, vous pouvez configurer une deuxième légende HTTP, MyCallout2, et une stratégie de répondeur, Pol2. Vous configurez Pol2 pour évaluer myCallout1 et invoquez myCallout2. Vous liez les deux stratégies de répondeur globalement.

Pour éviter la récursion des légendes HTTP, MyCallout1 est configuré avec un en-tête HTTP personnalisé unique appelé “Request1.” Pol1 est configuré pour éviter la récursion des légendes HTTP en utilisant l’expression de syntaxe par défaut,

HTTP.REQ.HEADER("Request1").EQ("Callout Request").NOT.
<!--NeedCopy-->

Pol2 utilise la même expression de syntaxe par défaut, mais exclut l’opérateur .NOT afin que la stratégie évalue MyCallout1 lorsque l’appliance Citrix ADC l’analyse. Notez que myCallout2 identifie son propre en-tête unique appelé « Request2 », et Pol2 inclut une expression de syntaxe par défaut pour empêcher myCallout2 de s’appeler de manière récursive.

Exemple :

> add policy httpCallout myCallout1

Done

> set policy httpCallout myCallout1 -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr
 ""10.102.3.95"" -urlStemExpr ""/cgi-bin/check_clnt_from_database.pl"" -headers Request1
("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(100)"

Done

> add responder policy Pol1 "HTTP.REQ.HEADER("Request1").EQ("Callout Request").NOT &&
SYS.HTTP_CALLOUT(myCallout1).CONTAINS("IP Matched")" RESET

Done

> bind responder global Pol1 100 END -type OVERRIDE

Done

> add policy httpCallout myCallout2

Done

> set policy httpCallout myCallout2 -IPAddress 10.102.3.96 -port 80 -returnType TEXT -hostExpr
""10.102.3.96"" -urlStemExpr ""/cgi-bin/check_clnt_location_from_database.pl"" -headers Request2
("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(200)"

 Done

> add responder policy Pol2 "HTTP.REQ.HEADER("Request2").EQ("Callout Request").NOT &&
 HTTP.REQ.HEADER("Request1").EQ("Callout Request") && SYS.HTTP_CALLOUT(myCallout2).CONTAINS
("APAC")" RESET

 Done

> bind responder global Pol2 110 END -type OVERRIDE

Done
<!--NeedCopy-->
Invocation d’une légende HTTP