复合高级策略表达式
您可以使用布尔运算符或算术运算符以及原子运算配置高级策略表达式。【中文译文】
Http.req.hostname.eq ("mycompany.com") && http.req.method.eq(post)
以下表达式添加两个目标的值,并将结果与第三个值进行比较:
Http.req.url.length + http.req.cookie.length \<= 500
复合表达式可以有任意数量的逻辑和算术运算符。
对,就是这样。URL . cookie。此表达式评估标题中的文本。【翻译】:
Http.req.url.length + http.req.cookie.length \<= 500 && http.req.header。(包含一些文本)
您可以使用括号来控制复合表达式中的求值顺序。
复合表达式中的布尔值
您可以使用以下运算符配置复合表达式:
& &。
“”。“真”,“真”。
示例:
http.req.url.hostname.eq(" myHost ") && http.req.header(" myHeader ").exists
| |。
“”。“真”,“真”。
!.
【中文译文】
Citrix ADC添加表达式“和,而不是。”但是,这些复合表达式的用途有限。Citrix 建议您使用运营商 &&、|| 和! 配置使用布尔逻辑的复合表达式。
复合表达式中的括号
可以使用括号来控制表达式的求值顺序。以下是该命令的一个示例:
http.req.url.contains("myCompany.com") || (http.req.url.hostname.eq("myHost") && http.req.header("myHeader").exists)
下面是另一个例子:
(http.req.header(“内容类型”)。存在&& http.req.header("Content-Type").eq("text/html")) || (http.req.header("Transfer-Encoding")。http.req.header("Content-Length").exists)
字符串的复合操作
下表介绍了可用于对字符串数据配置复合运算的运算符。
生成字符串值的操作 | 说明 |
---|---|
STR + STR | 将运算符左侧的表达式的值与右侧的值连接起来。示例:http.req。主机名+ http.req.url.protocol |
STR + num | 将运算符左侧的表达式的值与右侧的数值连接起来。示例:http.req。主机名+ http.req.url.content_length |
Num + STR | 中文:http://req.url . http://req.url。Content_length + http.req.url.hostname |
STR + IP | 将操作符左侧的表达式的字符串值与右侧的IP地址值连接起来。示例:http.req。主机名+ 10.00.000.00 |
IP + str | http://www.tingclass.cn/cn/或http://www.tingclass.cn/cn/【翻译】:DST + http.req.url.hostname |
str1 ALT str2 | “”“”“”“”“”“”“”【中文译文】:http://www.chinesewordword.com。主机名:Alt |
对的,对的 | 说明 |
---|---|
STR == STR | http://www.qqqq.com http://www.qqqq.com http://www.qqqq.comHeader("我有")== http.res.header("我有") |
STR <= STR | 评估运算符左侧的字符串是否与右边的字符串相同,还是按字母顺序排在前面。 |
STR >= STR | 评估运算符左侧的字符串是否与右侧的字符串相同,还是按字母顺序跟随它。 |
STR < STR | 评估运算符左侧的字符串是否按字母顺序排列在右侧的字符串之前。 |
STR > STR | 评估运算符左侧的字符串是否按字母顺序跟随右侧的字符串。 |
str ! != str | 评估运算符两侧的字符串是否不同。 |
字符串上的逻辑运算 | 说明 |
---|---|
Bool & Bool | “”。在计算复合表达式的组件时,由和连接的所有组件的计算结果必须为真实的。以下是一个示例:http.req.method。eq (GET) && http.req.url.query.contains (" my_pagelabel ") |
Bool || Bool | “”。计算复合表达式的组件时,如果属于或的表达式的任何组件的计算结果为真,则整个表达式为真。以下是一个例子:http.req.url.contains (js) | | http.res.header。(“内容类型”).Contains (javascript) |
保龄球 | 【中文】: |
数字的复合运算
您可以配置复合数字表达式。【翻译】:http://www.chinesechina.com
Http.req.header.length + http.req.url.length
下表介绍了可用于为数字数据配置复合表达式的运算符。
数字上的算术运算 | 说明 |
---|---|
Num + Num | 将运算符左侧的表达式的值添加到右侧表达式的值中。以下是一个示例:http.req。Content_length + http. request .url.length |
Num - Num | 从左侧表达式的值中减去运算符右侧表达式的值。 |
Num * Num | 将运算符左侧表达式的值与右侧表达式的值相乘。以下是一个示例:client.interface.rxthroughput * 9 |
Num / Num | 将运算符左侧的表达式的值除以右侧表达式的值。 |
Num % Num | 计算运算符左侧表达式的值除以右侧表达式的值的模数或余数。“15个、4个”、“12个、4个”、“0个”。 |
数量 | 在对数字应用按位逻辑否定后返回一个数字。数字的。表达式:~数值表达式。应用〜运算符的结果是-11(一个二进制 1110011,总共 32 位,所有运算符都在左边)。请注意,在应用运算符之前,所有返回的小于 32 位的值都隐式地在左侧有零,使其宽度为 32 位。 |
数字^数字 | 比较两个相等长度的位模式,并对每个数字参数中的每对对应位执行XOR运算,如果两个位不同则返回1,如果相同则返回0。将按位异或应用于整数参数和当前数字值后返回一个数字。如果按位比较中的值相同,则返回值为 0。数字的。表达式1:1(1),数字。表达式2:数字。表达式^数值。表达2(1).(2)。请注意,在应用运算符之前,所有返回的小于 32 位的值都隐式地在左侧有零,使其宽度为 32 位。 |
号码|号码 | 对数字值应用按位或后返回一个数字。如果按位比较中的任一值为 1,则返回值为 1。数字的。表达式1:1(1),数字。表达式2:数字。表达式1 |数字。表达2(1).(2)。请注意,在应用运算符之前,所有返回的小于 32 位的值都隐式地在左侧有零,使其宽度为 32 位。 |
数字&数字 | 比较两个相等长度的位模式,并对每对对应的位执行按位与运算,如果两个位都包含值 1,则返回 1;如果任一位均为 0,则返回 0。数字的。表达式1:1(1),数字。表达式2:数字。Expression1 & numeric。表达式2(2)。请注意,在应用运算符之前,所有返回的小于 32 位的值都隐式地在左侧有零,使其宽度为 32 位。 |
Num«Num | 根据右侧数字参数位数,返回数字值按位左移后的数字。请注意,移动的位数为整数模 32。数字的。1100年expression1返回12(二进制),数字.expression2返回3:数字。【中文译文】(1100000)。请注意,在应用运算符之前,所有返回的值都小于 32 位隐含地在左边有零,使它们变得 32 位宽。 |
Num»Num | 返回数值按位右移位数的整数参数位数后的数字。请注意,移动的位数为整数模 32。数字的。表达式1:1(1),数字。表达式2:数字。Expression1»数字。1(2) . RSIFT。请注意,在应用运算符之前,所有返回的小于 32 位的值都隐式地在左侧有零,使其宽度为 32 位。 |
对的,对的 | 说明 |
---|---|
Num == Num | 确定运算符左侧表达式的值是否等于右侧表达式的值。 |
Num != num | 确定运算符左侧表达式的值是否不等于右侧表达式的值。 |
Num > Num | 确定运算符左侧表达式的值是否大于右侧表达式的值。 |
Num < Num | 确定运算符左侧表达式的值是否小于右侧表达式的值。 |
Num >= Num | 确定运算符左侧表达式的值是否大于或等于右侧表达式的值。 |
Num <= Num | 确定运算符左侧表达式的值是否小于或等于右侧表达式的值 |
策略基础结构中数据类型的函数
Citrix ADC:
- 整数(32 位)
- 无符号长整型 (64 位)
- 双精度 (64 位)
简单表达式可以返回所有这些数据类型。此外,您可以创建使用算术运算符和逻辑运算符来计算或返回这些数据类型的值的复合表达式。此外,您可以在策略表达式中使用所有这些值。“”“”“”“”“”“”“”(2)、(2)、(2)、(2)。
算术运算符、逻辑运算符和类型提升
在复合表达式中,以下标准算术和逻辑运算符可用于双精度型和无符号长整型数据类型:
- +、-、* 和/
- %, ~, ^, &, |,«英文»
- = =, !=、>、<、>= 和 <=
【中文译文】
在整数、无符号长和双精度类型的操作数之间进行混合运算的所有情况下。完成类型提升是为了对同一类型的操作数进行操作。该操作将较低优先级类型提升为具有最高优先级类型的操作数。优先级顺序(从高到低)如下所示:
- 双
- 无符号长整型
- 整数
因此,返回数字结果的操作将返回该操作所涉及的最高类型的结果。
例如,如果操作数类型为整型和无符号长度,则整型操作数会自动转换为无符号长度类型。这种类型转换是在简单表达式中完成的。表达式前缀标识的数据类型与作为参数传递给函数的数据类型不匹配。在HTTP.REQ.CONTENT_LENGTH。Div (3ul) .中文:http://www.chinesewords.org。CONTENT_LENGT_LENGH 返回一个变为无符号长度的整数。无符号 long:作为参数传递给 DIV () 函数的数据类型,完成无符号长分割。同样,可以在表达式中推广论点。例如,HTTP.REQ.HEADER (“myHeader”) .TYPECAST_DOUBE_AT.DIV (5) 将整数 5 提升为双精度并执行双精度除法。
有关将一种类型的数据转换为另一种类型的数据的表达式的信息,请参阅打字转换数据。