ADC

关于评估 HTTP 和 TCP 负载

HTTP 请求或响应的有效负载由 HTTP 协议信息(如标头、URL、正文内容以及版本和状态信息)组成。配置默认语法表达式以评估 HTTP 负载时,您可以使用默认语法表达式前缀,并在必要时使用运算符。

例如,如果要确定 HTTP 连接是否包含名为“MySeader”的自定义标头,则可以使用以下表达式(包括 http.req.header("<header_name>") 前缀和存在运算符):

http.req.header("myHeader").exists

您还可以将多个高级策略表达式与布尔运算符和算术运算符组合起来。例如,以下复合表达式对于各种 Citrix ADC 功能(如集成缓存、重写和响应程序)可能非常有用。此表达式首先使用 && 布尔运算符来确定 HTTP 连接是否包含值为“text/html 的内容类型标头。“ 如果该操作返回 FALSE 的值,则表达式确定 HTTP 连接是否包含“传输编码”或“内容长度”标头。

(http.req.header("Content-Type").exists && http.req.header("Content-Type").eq("text/html")) || (http.req.header("Transfer-Encoding").exists) || (http.req.header("Content-Length").exists)

TCP 或 UDP 数据包的负载是数据包的数据部分。您可以配置高级策略表达式来检查 TCP 或 UDP 数据包的功能,包括以下内容:

  • 源域和目标域
  • 源端口和目标端口
  • 有效载荷中的文本
  • 记录类型

以下表达式前缀从有效负载的正文中提取文本:

  • HTTP.REQ.BODY(integer)。以多行文本对象形式返回 HTTP 请求的正文,直到整数参数中指定的字符位置。如果主体中的字符少于参数中指定的字符,则返回整个主体。
  • HTTP.RES.BODY(integer)。返回 HTTP 响应正文的一部分。返回文本的长度等于整数参数中的数字。如果正文中的字符少于以整数指定的字符,则返回整个正文。
  • CLIENT.TCP.PAYLOAD(integer)。以字符串形式返回 TCP 有效负载数据,从负载中的第一个字符开始,然后继续为整数参数中的字符数。

下面是一个示例,如果 1024 字节的响应正文包含字符串“https”,并且此字符串出现在字符串“开始字符串”之后和字符串“结束字符串”之前:

http.res.body(1024).after_str("start_string").before_str("end_string").contains("https")

注意: 您可以将任何文本操作应用于有效负载正文。有关可以应用于文本的操作的信息,请参阅 高级策略表达式:评估文本

关于评估 HTTP 和 TCP 负载