高级策略表达式的基本功能
高级策略表达式至少由前缀(或单个元素代替前缀)组成。大多数表达式还指定要对前缀标识的数据执行的操作。您可以设置最多1499个字符的表达式的格式,如下所示:
<前缀>。<操作>[<复合操作> <前缀>.<操作>…]
其中
<前缀>
是用于启动表达式的锚点。
前缀是一个用于标识数据单位的周期分隔键。例如,以下前缀检查HTTP请求是否存在名为"内容类型"的标头:
http.req.header(“内容类型”)
前缀也可以自行使用来返回前缀标识的对象的值。
<操作>
标识要对由前缀标识的数据执行的评估。
例如,请考虑以下表达式:
http.req.header(“内容类型”).eq (" text / html ")
在此表达式中,下面是运算符组件:
eq(“text / html”)
此运算符使Citrix ADC评估包含内容类型标头的任何HTTP请求,特别是确定此标头的值是否等于字符串“text / html”。有关更多信息,请参阅”操作。”
< compound-operator >
是一个布尔运算符或算术运算符,它从多个前缀或前缀 .操作元素形成复合表达式。
例如,请考虑以下表达式:
http.req.header(" Content-Type ").eq(" text/html ") && http.req.url.contains(" .html ")
前缀
表达式前缀表示离散数据片段。例如,表达式前缀可以表示HTTP URL的HTTP Cookie标头或HTTP POST请求正文中的字符串。表达式前缀可以识别和返回各种数据类型,包括以下内容:
- Tcp / ip数据包中的客户端ip地址
- Citrix ADC系统时间
- 通过HTTP进行的外部标注
- TCP或udp记录类型
在大多数情况下,表达式前缀以下列关键字之一开头:
- 客户:
- 标识正在发送请求或接收响应的客户端的特征,如以下示例所示:
- 前缀client.ip.dst指定请求或响应中的目标IP地址。
- 前缀client.ip.src指定源IP地址。
- HTTP:
- 标识HTTP请求或响应中的元素,如以下示例所示:
- 前缀http.req.body(整数)将HTTP请求的正文指定为多行文本对象,直到以整数指定的字符位置。
- 前缀http.req.header(“header_name”)指定一个HTTP头,如头名称中所指定的那样。
- 前缀HTTP .req. URL指定一个URL编码格式的HTTP URL。
服务器:
标识服务器中正在处理请求或发送响应的元素。
系统:
标识正在处理流量的Citrix ADC的特征。
注意:请注意,dns策略仅支持sys,客户端和服务器对象。
此外,在Citrix Gateway中,无客户端VPN功能可以使用以下类型的前缀:
文本:
标识请求或响应中的任何文本元素。
目标:
标识连接的目标。
网址:
标识HTTP请求或响应的url部分中的元素。
作为一般的经验法则,任何表达式前缀都可以是一个自包含的表达式。例如,以下前缀是一个完整的表达式,它返回字符串参数中指定的HTTP标头的内容(用引号括起来):
http.res.header。(“到了头”)
或者,您可以将前缀与简单操作相结合,以确定真和假值。例如,以下内容返回真或假的值:
.exists http.res.header。(“到了头”)
您还可以对表达式中的单个前缀和多个前缀使用复杂操作,如以下示例所示:
Http.req.url.length + http.req.cookie.length <= 500
可以指定哪些表达式前缀取决于Citrix ADC功能。下表描述了每个功能感兴趣的表达式前缀
功能 | 功能中使用的表达式前缀类型 |
---|---|
DNS | 系统,客户端,服务器 |
保护功能中的响应程序 | Http, sys,客户端 |
内容交换 | Http, sys,客户端 |
重写 | Http, sys,客户端,服务器,url,文本,目标,VPN |
集成缓存 | Http, sys,客户端,服务器 |
Citrix Gateway,无客户端访问 | Http, sys,客户端,服务器,url,文本,目标,VPN |
表 1.各种Citrix ADC功能中允许的表达式前缀类型
注意:有关功能中允许的表达式前缀的详细信息,请参阅该功能的文档。
单元素表达式
最简单的高级策略表达式包含单个元素。此元素可以是以下内容之一:
- 真的。高级策略表达式可以仅由值真实组成。这种类型的表达式始终返回真实的值。它对于链接策略操作和触发转表达式非常有用。
- 假的。高级策略表达式可以仅由值假组成。这种类型的表达式始终返回假的值。
- 复合表达式的前缀。例如,前缀http.req . hostname是返回主机名的完整表达式,http.req。Url是返回Url的完整表达式。前缀也可以与操作和其他前缀结合使用,以形成复合表达式。
操作
在大多数表达式中,您还可以指定对前缀标识的数据进行操作。例如,假设您指定以下前缀:
http.req.url
此前缀提取HTTP请求中的url。此表达式前缀不需要在表达式中使用任何运算符。但是,当您配置处理HTTP请求URL的表达式时,您可以指定用于分析URL特定特征的操作。下面是几种可能性:
- 在url中搜索特定主机名。
- 在url中搜索特定路径。
- 评估url的长度。
- 在url中搜索指示时间戳的字符串并将其转换为gmt。
下面是标识名为服务器的HTTP标头的前缀示例,以及在标头值中搜索字符串IIS的操作:
http.res.header(“服务器”).contains (IIS)
下面是标识主机名的前缀示例,以及搜索字符串" www.mycompany.com "作为名称值的操作:
http.req.hostname.eq(“www.mycompany.com”)
表达式前缀的基本操作
下表描述了一些可以对表达式前缀执行的基本操作。
操作 | 确定是否 |
---|---|
包含(<字符串>) | 对象匹配<字符串>。下面是一个示例:http.req.header (cache - control) .contains(“no - cache”) |
存在 | 特定项目存在于对象中。下面是一个示例:http.res.header .exists(“MyHdr”) |
EQ(<文本>) | 对象中存在一个特定的非数字值.下面是一个示例:http.req.method.eq(post) |
EQ(<整数>) | 对象中存在一个特定的数值。下面是一个示例:client.ip.dst.eq (10.100.10.100) |
LT(<整数>) | 对象的值小于特定值。下面是一个示例:http.req.content_length.lt (5000) |
GT(<整数>) | 对象的值大于特定值.下面是一个示例:http.req.content_length.gt(5) |
下表总结了几种可用的操作类型。
操作类型 | 说明 |
---|---|
文本操作 | 将单个字符串和字符串集与目标的任何部分匹配。目标可以是整个字符串、字符串的开头或字符串的开头和结尾之间的任何文本部分。例如,您可以从" XYZSomeText "中提取字符串" XYZ "。或者,您可以将HTTP标头值与不同字符串的数组进行比较。您还可以将文本转换为其他类型的数据。以下示例:将字符串转换为整数值,从url中的查询字符串创建列表,然后将字符串转换为时间值。 |
数字操作 | 数值运算包括应用算术运算符,评估内容长度,列表中的项目数,日期,时间和IP地址。 |