A propos des expressions de texte

Vous pouvez configurer diverses expressions pour utiliser du texte qui circule via l’appliance Citrix ADC. Voici quelques exemples de la façon dont vous pouvez analyser le texte à l’aide d’une expression de syntaxe par défaut :

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

    Par exemple, vous pouvez 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 bloquer les demandes pour des URL particulières. Notez que la chaîne peut se produire au début, au milieu ou à la fin d’une autre chaîne.

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

    Par exemple, vous pouvez identifier toutes les requêtes POST qui sont dirigées vers une application de base de données afin d’actualiser les données d’application mises en cache.

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

A 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 basées sur le texte 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îne.

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

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

Les expressions suivantes sont des exemples de correspondance d’un type de fichier dans une requête :

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, convertir la chaîne en minuscules ou concaténer des chaînes.

Remarque :

Des opérations complexes sont disponibles pour effectuer une correspondance basée 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 ou des expressions de texte. Par exemple, l’expression suivante concatène les valeurs renvoyées de 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, reportez-vous à la section 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.

Lignes directrices pour les 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îne :

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

Dans le premier cas, l’expression regarde spécifiquement la requête URL. Dans le second cas, l’expression analyse les données pour 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 composition, reportez-vous à la section Données de typecasting. 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 de texte non structurées ont généralement de meilleures performances que les expressions régulières. Par exemple, ce qui suit est une expression de texte non structuré :

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, reportez-vous à la section Expressions régulières.