ADC

À propos des expressions de texte

Vous pouvez configurer différentes expressions pour travailler avec du texte qui circule dans l’appliance NetScaler. Voici quelques exemples de la façon dont vous pouvez analyser du texte à l’aide d’une expression de stratégie avancée :

  • Déterminez qu’il existe un en-tête HTTP particulier.

    Par exemple, vous pouvez souhaiter identifier les requêtes HTTP qui contiennent un en-tête Accept-Language particulier afin de diriger la demande vers un serveur particulier.

  • Déterminez qu’une URL HTTP particulière contient une chaîne particulière.

    Par exemple, vous pouvez souhaiter bloquer les demandes pour des URL particulières. Notez que la chaîne peut apparaître au début, au milieu ou à la fin d’une autre chaîne.

  • Identifiez une demande POST qui est dirigée vers une application particulière.

    Par exemple, vous pouvez souhaiter identifier toutes les demandes POST qui sont dirigées vers une application de base de données dans le but d’actualiser les données d’application mises en cache.

Notez qu’il existe des outils spécialisés permettant de visualiser le flux de données des requêtes et réponses HTTP. Vous pouvez utiliser les outils pour afficher le flux de données.

À propos des opérations sur le texte

Une expression textuelle consiste en au moins un préfixe pour identifier un élément de données et généralement (mais pas toujours) une opération sur ce préfixe. Les opérations textuelles peuvent s’appliquer à n’importe quelle partie d’une demande ou d’une réponse. Les opérations de base sur le texte incluent différents types de correspondances de chaînes.

Par exemple, l’expression suivante compare une valeur d’en-tête à une chaîne :

http.req.header("myHeader").contains("some-text")

Les expressions suivantes sont des exemples de mise en correspondance d’un type de fichier dans une demande :

http.req.url.suffix.contains("jpeg")

http.req.url.suffix.eq("jpeg")

Dans les exemples précédents, l’opérateur contains autorise une correspondance partielle et l’opérateur eq recherche une correspondance exacte.

D’autres opérations sont disponibles pour formater la chaîne avant de l’évaluer. Par exemple, vous pouvez utiliser des opérations de texte pour supprimer les guillemets et les espaces blancs, pour convertir la chaîne en minuscules ou pour concaténer des chaînes.

Remarque : Des opérations

complexes sont disponibles pour effectuer des correspondances basées sur des motifs ou pour convertir un type de format de texte en un autre type.

Pour plus d’informations, consultez les rubriques suivantes :

Compilation et priorité dans les expressions de texte

Vous pouvez appliquer différents opérateurs pour combiner des préfixes de texte ou des expressions. Par exemple, l’expression suivante concatène les valeurs renvoyées pour chaque préfixe :

http.req.hostname + http.req.url

Voici un exemple d’expression de texte composé qui utilise un AND logique. Les deux composants de cette expression doivent avoir la valeur TRUE pour qu’une requête corresponde à l’expression :

http.req.method.eq(post) && http.req.body(1024).startswith("destination=")

Remarque :

Pour plus d’informations sur les opérateurs de composition, voir Expressions avancées composées.

Catégories d’expressions de texte

Les principales catégories d’expressions de texte que vous pouvez configurer sont les suivantes :

Remarque :

L’analyse d’un corps de document, tel que le corps d’une requête POST, peut affecter les performances. Vous pouvez tester l’impact sur les performances des stratégies qui évaluent le corps d’un document.

Instructions relatives aux expressions de texte

Du point de vue des performances, il est généralement préférable d’utiliser des fonctions prenant en charge le protocole dans une expression. Par exemple, l’expression suivante utilise une fonction prenant en charge le protocole :

HTTP.REQ.URL.QUERY

L’expression précédente fonctionne mieux que l’expression équivalente suivante, qui est basée sur l’analyse de chaînes :

HTTP.REQ.URL.AFTER_STR("?")

Dans le premier cas, l’expression se penche spécifiquement sur la requête URL. Dans le second cas, l’expression analyse les données à la recherche de la première occurrence d’un point d’interrogation.

Il y a également un avantage de performance de l’analyse structurée du texte, comme dans l’expression suivante :

HTTP.REQ.HEADER("Example").TYPECAST_LIST_T(',').GET(1)

(Pour plus d’informations sur la typographie, voir Données de typographie. L’expression de typecasting, qui recueille des données délimitées par des virgules et les structure en une liste, fonctionnerait généralement mieux que l’équivalent non structuré suivant :

HTTP.REQ.HEADER("Example").AFTER_STR(",").BEFORE_STR(",")

Enfin, les expressions textuelles non structurées présentent généralement de meilleures performances que les expressions régulières. Par exemple, voici une expression de texte non structurée :

HTTP.REQ.HEADER("Example").AFTER_STR("more")

L’expression précédente fournirait généralement de meilleures performances que l’équivalent suivant, qui utilise une expression régulière :

HTTP.REQ.HEADER("Example").AFTER_REGEX(re/more/)

Pour plus d’informations sur les expressions régulières, voir Expressions régulières.

À propos des expressions de texte