Citrix ADC

在表达式中指定字符集

Citrix ADC设备上的策略基础结构支持 ASCII码和 UTF-8字符集。默认字符集是 ASCII码如果要为其配置表达式的流量仅包含 ASCII码字符,则无需在表达式中指定字符集。设备允许包含二进制字符的所有字符串和字符文本。但是,UTF-8字符集仍需要字符串和字符文本为有效的 UTF-8

CLIENT.TCP.PAYLOAD (100) .CONTAINS(“\ xff \ x02”)

在表达式中,必须在表达式中的点引入SET_CHAR_SET()函数,之后必须在指定的字符集中执行数据处理。例如,在表达式HTTP.REQ.BOYE(1000)中,如果存储在模式集“希腊字母”中的字符串在utf - 8中,则必须包含SET_Char_SET (UTF_8)函数紧接在包含S_any(“<字符串>”)函数之前,如下所示:

HTTP.REQ.BODY(1000)。AFTER_REGEX (re /下面的例子)。BEFORE_REGEX(re/在前面的例子中/). set_char_set (UTF_8)。CONTAINS_ANY(“Greek_字母”)

集合\字符\集合()函数设置表达式中所有进一步处理(即对于所有后续函数)的字符集,除非稍后在表达式中被另一个更改字符集的 集合\字符\集合()函数覆盖。因此,如果给定简单表达式中的所有函数都适用于 UTF-8则可以在识别文本的函数(例如,标题()或 正文()函数)之后立即包含 集合字符集合(UTF 8)函数。在上面第一段之后的第二个示例中,如果传递给后面的 ASCII码参数更改为 UTF-8字符串,则可以在身体 (1000) 函数之后立即包含 集合字符集合(UTF 8)函数,如下所示:

HTTP.REQ.BODY(1000).SET_CHAR_SET(UTF_8).AFTER_REGEX(re/Bücher/).BEFORE_REGEX(re/Wörterbuch/).包含任何(“希腊字母”)

UTF-8字符集是 ASCII码字符集的超集,因此,如果将字符集更改为 UTF-8则为 ASCII码字符集配置的表达式将继续按预期工作。

具有不同字符集的复合表达式

在复合表达式中,如果将表达式的一个子集配置为处理 ASCII码字符集中的数据,并将其余表达式配置为处理 UTF-8字符集中的数据,则在评估表达式时考虑为每个单独表达式指定的字符集单独。但是,在处理复合表达式时,在处理操作符之前,设备会将返回 ASCII码值的字符集提升为 UTF-8例如,在以下复合表达式中,第一个简单表达式评估 ASCII码字符集中的数据,而第二个简单表达式评估 UTF-8字符集中的数据:

HTTP.REQ.HEADER(“到了头”)= = HTTP.REQ.BODY (10) .SET_CHAR_SET (UTF_8)

但是,在处理复合表达式时,就在评估”等于“布尔运算符之前,Citrix ADC设备会将HTTP.REQ.HITAL (MySheader)返回的值的字符集提升为utf - 8。

以下示例中的第一个简单表达式评估 ASCII码字符集中的数据。但是,当 Citrix ADC设备处理复合表达式时,在连接两个简单表达式的结果之前,该设备会将 HTTP.REQ.BOTY(10)返回的值的字符集提升为 UTF-8

HTTP.REQ.BODY(10)+HTTP.REQ.HEADER(“MyHeader”).SET\u CHAR\u SET(UTF\u 8)

因此,复合表达式返回utf - 8字符集中的数据。

根据流量的字符集指定字符集

您可以根据流量特征将字符集设置为utf - 8。如果您不确定所评估流量的字符集是否为utf - 8,则可以配置一个复合表达式,其中第一个表达式检查utf - 8流量,后续表达式将字符集设置为utf - 8。下面是一个复合表达式的示例,该示例首先检查请求的“utf - 8”的内容类型标头中的“字符集”值,然后检查请求中的前1000个字节是否包含utf - 8字符串肉商:

HTTP.REQ.HEADER(“内容类型”).SET_TEXT_MODE(IGNORECASE).TYPECAST_NVLIST_T('=',';','“)).VALUE(“字符集”).EQ(“UTF-8”)和&HTTP.REQ.BODY(1000).SET_字符集(UTF_8).CONTAINS(“Bücher”)

如果您确定正在评估的流量的字符集是utf - 8,则示例中的第二个表达式就足够了。

表达式中的字符和字符串文字

在表达式评估过程中,即使当前字符集是ASCII,分别用单引号(")和引号(" ")括起来的字符文字和字符串文字也被视为utf - 8字符集中的文字。在给定表达式中,如果函数正在对ASCII字符集中的字符或字符串文字进行操作,并且在文字中包含非ASCII字符,则会返回错误。

注意

高级策略表达式中的字符串文字现在与策略表达式一样长。表达式允许为 1499个字节或 8191个字节长度。

十六进制和八进制格式的值

配置表达式时,可以以八进制和十六进制格式输入值。但是,每个十六进制或八进制字节被视为 UTF-8字节。无效的 UTF-8字节都会导致错误,无论该值是手动输入还是从剪贴板粘贴。例如,“\xce\x20”是一个无效的 UTF-8字符,因为“c8”后面不能跟“20”(多字节 UTF-8字符串中的每个字节必须设置高位)。无效 UTF-8字符的另一个示例是“xce xa9”因为十六进制字符由空格字符分隔。

返回 UTF-8字符串的函数

只有text>.XPATH.XPATH\u JSON函数始终返回 UTF-8字符串。以下 MySQL例程在运行时确定要返回的字符集,具体取决于协议中的数据:

  • MYSQL\u客户端\u T.USER
  • MYSQL_客户端_T.数据库
  • MYSQL_REQ_QUERY_T.命令
  • MYSQL\u请求\u查询\u T.TEXT
  • MYSQL\u请求\u查询\u T.TEXT()
  • MYSQL\u RES\u ERROR\u T.SQLSTATE
  • MYSQL_RES_ERROR_T。消息
  • MYSQL\u RES\u FIELD\u T.CATALOG
  • MYSQL\u RES\u FIELD\u T.DB
  • MYSQL_RES_FIELD_T。表格
  • MSQL_RES_FIELD_T。ORIGINAL_TABLE
  • MYSQL_RES_FIELD_T。的名字
  • MYSQL\u RES\u字段\u T.ORIGINAL\u名称
  • MYSQL\u RES\u OK\u T消息
  • MYSQL_RES_ROW_T。TEXT_ELEM (< unsigned int >)

UTF-8的端点连接设置

通过使用端点连接(例如使用油灰)设置到Citrix ADC设备的连接时,必须设置将数据传输到utf - 8的字符集。

高级策略表达式中的最小和最大函数

高级策略表达式支持以下最小值和最大值函数。

  1. (< expression1 > .max (< expression2 >)- 返回两个值中的最大值。
  2. .min(- 返回两个值中的最小值。