ADC

配置 HTTP 标注

配置 HTTP 标注时,您可以指定请求的类型(HTTP 或 HTTPS)、目标和请求的格式。响应的预期格式,最后是要分析的响应部分。

对于目标,您可以指定 HTTP 标注代理的 IP 地址和端口。或者使用负载平衡、内容切换或缓存重定向虚拟服务器来管理 HTTP 标注请求。

在第一种情况下,HTTP 标注请求直接发送到 HTTP 标注代理。在第二种情况下,HTTP 标注请求将发送到指定虚拟服务器的虚拟 IP 地址 (VIP)。虚拟服务器处理请求的方式与处理客户端请求的方式相同。例如,如果您希望生成许多标注,则可以在多台服务器上配置 HTTP 标注代理的实例,将这些实例(作为服务)绑定到负载平衡虚拟服务器,然后在 HTTP 标注配置中指定负载平衡虚拟服务器。然后,负载平衡虚拟服务器根据负载平衡算法确定的配置实例上的负载平衡。

对于 HTTP 标注请求的格式,您可以指定 HTTP 标注请求(基于属性的 HTTP 标注)的各个属性,也可以将整个 HTTP 标注请求指定为高级策略表达式(基于表达式的 HTTP 标注)。

下表介绍了 HTTP 标注策略中的元素:

有关更多信息,请参阅 策略 HTTPcallout

参数 说明
名称 标注的名称,最多 127 个字符
IP 地址和端口(ip 地址/ 端口)或虚拟服务器名称(虚拟服务器) 向其发送标注的服务器的 IPv4 或 IPv6 地址,或者通配符,以及向其发送标注的服务器上的端口或通配符。或者,服务类型为 HTTP 的负载平衡、内容切换或缓存重定向虚拟服务器的名称。
HTTP 方法(http 方法) HTTP 方法(HTTP方法)。此标注发送的 HTTP 请求中使用的方法。有效值:GET 或 POST。默认值:GET。
主机表达式 (hostExPR) 主机表达式 (hostExPR)。用于配置主机标头的高级文本表达式。最大长度:255。表达式可以是文字值,也可以是派生该值的高级表达式。示例:”10.101.10.11” , “http.req.header(“Host”)”
URL 干表达式 (urlStemExPR) URL 干表达式 (urlStemExPR) 用于生成 URL 干的高级字符串表达式。最大长度:8191。表达式可以是文字字符串,也可以是派生值的表达式。示例:“” /mysite/index.html “” “http.req.url”
HTTP 标头(标头) HTTP 标头(标头)。用于在 HTTP 标注请求中插入 HTTP 标题及其值的高级文本表达式。为每个标题指定一个值。您可以将标题名称指定为字符串,将标题值指定为高级表达式。指定以空格分隔的标题。例如-header cip(客户端 .ip.src)hdr(http.req.header(“HDR”))。标题的数量可以是 8
基于表达式的发送到服务器的请求 (fullRequExPR) Citrix ADC 将作为高级表达式发送的确切 HTTP 请求,最多 8191 个字符。如果指定此参数,则必须省略 HttpMethod、hostExPR、urlSTEMEXPR、标头和参数参数。请求表达式受使用标注的功能的约束。例如,HTTP.RES 表达式不能用于请求时间策略库或 TCP 内容交换策略库中。
基于表达式的请求发送到服务器 (BodyExPR) 用于生成请求正文的高级字符串表达式。表达式可以包含一个文字字符串或派生值的表达式(例如,client.ip.src)。与-fullRqexPR 互相排斥。
参数 用于在标注发送的 HTTP 请求中插入查询参数的高级表达式。为配置的每个参数指定一个值。如果标注请求使用 GET 方法,则这些参数将插入到 URL 中。如果标注请求使用 POST 方法,则这些参数将插入 POST 正文中。您可以将查询参数名称配置为字符串,将值配置为高级表达式。参数值经过 URL 编码。指定以空格分隔的参数,例如:-parameters name1(“name1”) name2(http.req.header(“hdr”))。最多可以配置 8 个参数。
返回类型 (returnType) 目标应用程序在对标注的响应中返回的数据类型。有效值:TEXT:将返回值视为文本字符串。NUM:将返回值视为数字。BOOL:将返回值视为布尔值。注意:设置退货类型之后,您无法更改退货类型。
从响应中提取数据的表达式 (ResultExPR) 从 HTTP 标注的响应中提取 HTTP.RES 对象的高级表达式。最大长度为 8191。此表达式中的操作必须与返回类型匹配。例如,如果配置返回类型的文本,则结果表达式必须是基于文本的表达式。如果返回类型为 num,则结果表达式 (ResultExPR) 必须返回类似于以下内容的数值:“http.res.body (10000) .length” 注意:有时,如果设置了 TEXT 的返回类型并且从服务器发送的结果超过 16 KB,则结果表达式可以返回 NULL。例如,当结果为超过 16 KB 的连接字符串时。
方案 标注服务器的方案类型。例如:HTTP、https
CacheForSECS 缓存标注响应的持续时间(以秒为单位)。缓存的响应存储在名为 “calloutContent Group” 的集成缓存内容组中。如果未配置持续时间,除非使用普通的缓存配置来缓存它们,否则不会缓存标注响应。此参数优先于本来应用于这些响应的任何常规缓存配置。

注意:设备不检查请求的有效性。您必须确保该请求是有效的请求,且不包含任何机密信息。不正确或不完整的 HTTP 标注配置会导致运行时不与操作关联的 UndiF 条件。UNDEF 条件仅更新未定义点击计数器,这使您能够对错误配置的 HTTP 标注进行故障排除。但是,设备会解析 HTTP 标注请求,以便您能够为标注配置某些 Citrix ADC 功能。这可能会导致 HTTP 标注调用自己。有关标注递归以及如何避免它的信息,请参阅 避免 HTTP 标注递归

最后,无论是使用 HTTP 请求属性还是表达式来定义 HTTP 标注请求的格式,都必须指定来自 HTTP 标注代理的响应格式以及要评估的响应部分。响应类型可以是布尔值、数字或文本。仅基于此返回类型,您可以在标注响应中使用进一步的表达式方法。如果返回类型是数字,则可以根据标注响应使用基于数字的表达式。要评估的响应部分由表达式指定。例如,如果您指定响应包含文本,则可以使用 HTTP.RES.BODY(<unit>) 指定设备必须仅评估<unit>来自标注代理的响应的前一个字节。

在命令行中,首先使用 add 命令创建 HTTP 标注。添加标注时,所有参数都设置为 NONE 的默认值,但 HTTP 方法除外,该方法设置为 GET 的默认值。然后,您可以使用 set 命令配置标注的参数。set 命令用于配置两种类型的标注(基于属性和基于表达式的标注)。不同之处在于用于配置两种类型的标注的参数。因此,后面的命令行说明包括一个用于配置基于属性的标注的 set 命令和用于配置基于表达式的标注的 set 命令。在配置实用程序中,所有这些配置任务都在单个对话框中执行。

注意:在将 HTTP 标注放入策略之前,您可以修改除返回类型之外的所有配置参数。一旦 HTTP 标注出现在策略中,就无法完全修改在标注中配置的表达式。例如,您不能将 HTTP.REQ.HEADER(“myval”) 更改为 CLIENT.IP.SRC。您可以修改传递给表达式的运算符和参数。例如,您可以将 HTTP.REQ.HEADER("myVal1") 更改为 HTTP.REQ.HEADER("myVal2") 或将 HTTP.REQ.HEADER("myVal") 更改为 HTTP.REQ.HEADER("myVal").AFTER_STR(<string>)。如果 set 命令失败,请创建 HTTP 标注。

HTTP 标注配置涉及配置高级策略表达式。有关配置高级策略表达式的详细信息,请参阅 配置高级策略表达式:入门 主题。

使用命令行界面配置 HTTP 标注

在命令提示窗口中执行以下操作:

创建 HTTP 标注。

add policy httpCallout <name> [-IPAddress <ip_addr|ipv6_addr>] [-port<port>] [-vServer <string>] [-returnType <returnType>] [-httpMethod (GET | POST )] [-hostExpr <expression>]  [-urlStemExpr <expression>] [-headers <name(value)> ...] [-parameters <name(value)> ...] [-bodyExpr <expression>] [-fullReqExpr <expression>] [-scheme ( http | https )] [-resultExpr <expression>] [-cacheForSecs <secs>] [-comment <string>]

<!--NeedCopy-->

例如


add policy httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req.url" -parameters Name("My Name") -headers Name("MyHeader")-resultExpr "http.res.body(10000).length"

<!--NeedCopy-->

修改 HTTP 标注配置。

set policy httpCallout <name> [-IPAddress <ip_addr|ipv6_addr|\*>] [-port <port|\*>] [-vServer <string>] [-returnType <returnType>] [-httpMethod ( GET | POST )] [-hostExpr <string>] [-urlStemExpr <string>] [-headers <name(value)> ...] [-parameters <name(value)> ...] [-resultExpr <string>]

<!--NeedCopy-->

例如

> set policy httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req.url" -parameters Name("My Name") -headers Name("MyHeader") -resultExpr "http.res.body(10000).length"
<!--NeedCopy-->

使用 fullRequExPR 参数配置 HTTP 标注。

set policy httpCallout <name> [-vServer <string>] [-returnType <returnType>] [-fullReqExpr <string>] [-resultExpr <string>]
<!--NeedCopy-->

例如


> set policy httpCallout mycallout1 -vserver lbv1 -returnType num fullReqExpr q{"GET " + http.req.url + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1) + "r\nHost:10.101.10.10\r\nAccept: \*/\*\r\n\r\n"}

<!--NeedCopy-->

验证 HTTP 标注的配置。


show policy httpCallout `<name>`

sh policy httpCallout mycallout1
> Name: mycallout1
>Vserver: lbv1 (UP)
Effective Vserver state: UP
Return type: TEXT
Scheme: HTTP
Full REQ expr: "GET " + http.req.url + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1)+ "r\nHost:10.101.10.10\r\nAccept: \*/\*\r\n\r\n"
Result expr: http.res.body(100)
Hits: 0
Undef Hits: 0
Done
>

<!--NeedCopy-->

使用配置实用程序配置 HTTP 标注

  1. 导航到 AppExpert > HTTP 标注
  2. 在详细信息窗格中,单击 Add(添加)。
  3. 在 “ 创建 HTTP 标注 ” 对话框中,配置 HTTP 标注的参数。有关参数的描述,请将鼠标光标悬停在复选框上。
  4. 单击 Create(创建),然后单击 Close(关闭)。 配置 HTTP 标注
配置 HTTP 标注