Citrix ADC

字符串匹配如何使用模式集和数据集

一个模式集或数据集包含一组模式,每个模式都被分配一个唯一的索引。将策略应用于数据包时,表达式将标识要计算的字符串,操作员将该字符串与模式集或数据集中定义的模式进行比较,直到找到匹配项或对所有模式进行比较。然后,根据其函数,运算符返回一个布尔值,指示是否找到匹配的模式,或者返回与字符串匹配的模式索引。

笔记:本主题解释模式集的工作原理。数据集也是这样工作的。模式集和数据集之间的唯一区别是在集合中定义的模式类型。

考虑以下用例,以理解如何将模式用于字符串匹配。

您需要确定URL后缀(目标文本)是否包含任何图像文件扩展名。如果不使用模式集,则必须定义复杂表达式,如下所示:

HTTP.REQ.URL.SUFFIX.CONTAINS("svg") μ HTTP.REQ.URL.SUFFIX.CONTAINS("bmp") μ HTTP.REQ.URL.SUFFIX.CONTAINS("png") μ HTTP.REQ.URL.SUFFIX.CONTAINS("gif") μ HTTP.REQ.URL.SUFFIX.CONTAINS("tiff") μ HTTP.REQ.URL.SUFFIX.CONTAINS("jpg") 

如果URL的后缀为“jpg”,则Citrix ADC设备必须依次遍历整个复合表达式(从一个子表达式到下一个子表达式),以确定请求引用的是jpg图像。下图显示了该过程中的步骤。

局部图像

当一个复合表达式包含数百个子表达式时,上述过程是资源密集型的。更好的替代方法是调用模式集的表达式,如下图所示。

局部图像

如上所示,在策略评估期间,操作符(CONTAINS_ANY)将请求中标识的字符串与模式集中定义的模式进行比较,直到找到匹配为止。使用Sample_Patset表达式,通过六个子表达式的多次迭代减少到只有一个。

通过消除配置使用多个OR操作执行字符串匹配的复合表达式的需要,模式集或数据集简化了配置并加快了请求和响应的处理。

字符串匹配如何使用模式集和数据集