ADC

Invoquer 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 avancée. Dans cette expression, <name> il s’agit du nom de la légende HTTP que vous souhaitez appeler.

Vous pouvez utiliser des opérateurs d’expression de stratégie avancée 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 de l’agent de légende HTTP détermine le jeu 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 elle-même de manière récursive. La récursion des légendes HTTP peut être évitée en combinant l’expression de légende HTTP avec une expression de stratégie avancée 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, lorsqu’une stratégie invoque une légende, lorsque l’appliance NetScaler analyse la légende avant de l’envoyer au serveur d’appel, un deuxième ensemble de stratégies peut évaluer la légende et invoquer des légendes supplémentaires, qui peuvent à leur 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. Vous pouvez ensuite configurer une deuxième légende HTTP, MyCallout2, et une stratégie de répondeur, Pol2. Vous configurez Pol2 pour évaluer MyCallout1 et invoquer 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 à l’aide de l’expression de stratégie avancée,

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

Pol2 utilise la même expression de stratégie avancée, mais exclut l’opérateur .NOT afin que la stratégie évalue MyCallout1 lorsque l’appliance NetScaler l’analyse. Notez que MyCallout2 identifie son propre en-tête unique appelé « Request2 », et Pol2 inclut une expression de stratégie avancée pour empêcher MyCallout2 de s’appeler récursivement.

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-->
Invoquer une légende HTTP

Dans cet article