Citrix ADC

避免HTTP标注递归

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

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

为了防止标注侦听本身,您必须识别HTTP标记请求的至少一个唯一特征,然后将所有请求排除在调用呼叫调用的策略规则中处理此特征。您可以通过在策略规则中包含另一个高级策略表达式来实现。表达必须在SYS.HTTP_CALLOUT(<名称>)表达式使其在评估标注表达式之前进行评估。例如:

<阻止缩小递归>或sys.http_callout()<! -  yourcopy  - >

当您以这种方式配置策略规则时,当设备生成请求并解析它时,复合规则的计算结果为FALSE,不会再次生成callout,并且正确地增加选择计数器。

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

例子

> add policy httpCallout myCallout Done > set policy httpCallout myCallout -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr "\"10.102.3.95\"" -urlStemExpr "\"/ gi-bin/check_clnt_from_database.pl\"" -headers Request("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(100)">添加响应器策略Pol1 "HTTP.REQ.HEADER(\"Request\")。EQ(\“Callout请求\”)。没有T && SYS.HTTP_CALLOUT(myCallout).CONTAINS(\"IP Matched\")" RESET Done > bind responder global Pol1 100 END -type OVERRIDE Done 

笔记:您还可以配置一个表达式来检查请求URL是否包含为HTTP callout配置的stem表达式。要实现该解决方案,请确保HTTP调出代理只能响应HTTP调出,而不能响应通过设备直接发出的其他请求。如果HTTP调出代理是一个服务于其他客户端请求的应用程序或Web服务器,那么这样的表达式将阻止设备处理那些客户端请求。相反,如前所述,使用唯一的自定义标头。

避免HTTP标注递归