ADC
感谢您提供反馈

这篇文章已经过机器翻译.放弃

避免 HTTP 标注递归

即使 Citrix ADC 设备不检查 HTTP 标注请求的有效性,它也会在将请求发送到 HTTP 标注代理之前解析请求一次。此解析允许设备将标注请求视为任何其他传入请求,从而允许您配置几个有用的 Citrix ADC 功能(如集成缓存)来处理标注请求。

但是,在此解析过程中,HTTP 标注请求可以选择相同的策略,因此递归地调用自己。设备检测递归调用并引发未定义 (UnDF) 条件。但是,递归调用会导致策略和 HTTP 标注选择计数器递增两个计数,而不是每个计数一个。

要防止标注调用自身,您必须确定 HTTP 标注请求的至少一个唯一特性,然后排除调用标注的策略规则处理具有此特性的所有请求。您可以通过在策略规则中包含另一个默认语法表达式来执行此操作。表达式必须位于表SYS.HTTP_CALLOUT(<name>) 达式之前,以便在评估注解表达式之前对其进行计算。例如:

<Expression that prevents callout recursion> OR SYS.HTTP_CALLOUT(<name>)

以这种方式配置策略规则时,当设备生成请求并对其进行解析时,复合规则的计算结果为 FALSE,不会再次生成标注,选择计数器也会正确递增。

为 HTTP 标注请求分配唯一特性的一种方法是在配置标注时包含唯一的自定义 HTTP 标头。下面是一个名为“myCallout”的 HTTP 标注示例。标注生成 HTTP 请求,用于检查客户端的 IP 地址是否存在于列入黑名单的 IP 地址的数据库中。标注包含一个名为“请求”的自定义标头,该标头被设置为值“标注请求”。“ 全局绑定响应程序策略“Pol1”调用 HTTP 标注,但排除其请求标头设置为此值的所有请求,从而防止再次调用 myCallout。阻止第二次调用的表达式是 HTTP.REQ.HEADER(“Request”).EQ(“Callout Request”).NOT。

例如

> add policy httpCallout myCallout Done > set policy httpCallout myCallout -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr ""10.102.3.95"" -urlStemExpr ""/cgi-bin/check_clnt_from_database.pl"" -headers Request("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(100)" Done > add responder policy Pol1 "HTTP.REQ.HEADER("Request").EQ("Callout Request").NOT && SYS.HTTP_CALLOUT(myCallout).CONTAINS("IP Matched")" RESET Done > bind responder global Pol1 100 END -type OVERRIDE Done

注意: 您还可以配置表达式来检查请求 URL 是否包含为 HTTP 标注配置的干表达式。要实施该解决方案,请确保 HTTP 标注代理只能响应 HTTP 标注,而不能响应通过设备定向的其他请求。如果 HTTP 标注代理是服务其他客户端请求的应用程序或 Web 服务器,则此表达式会阻止设备处理这些客户端请求。而是使用前面所述的唯一自定义标头。

本内容的正式版本为英文版。部分 Cloud Software Group 文档内容采用了机器翻译,仅供您参考。Cloud Software Group 无法控制机器翻译的内容,这些内容可能包含错误、不准确或不合适的语言。对于从英文原文翻译成任何其他语言的内容的准确性、可靠性、适用性或正确性,或者您的 Cloud Software Group 产品或服务沿用了任何机器翻译的内容,我们均不作任何明示或暗示的保证,并且适用的最终用户许可协议或服务条款或者与 Cloud Software Group 签订的任何其他协议(产品或服务与已进行机器翻译的任何文档保持一致)下的任何保证均不适用。对于因使用机器翻译的内容而引起的任何损害或问题,Cloud Software Group 不承担任何责任。
避免 HTTP 标注递归