![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
Intelligent Management:HTTP 操作数
使用子表达式实用程序构建器中的 HTTP 操作数,此构建器是一个可选工具,可帮助您通过使用 AND、OR、NOT 和括号分组从子表达式构建复杂的规则条件。
规则
每个工作类都包含一个可选的有序规则列表,对特定请求计算这些规则以确定该请求的策略。每个规则都由一个布尔表达式和一个策略值组成。如果该表达式对于特定请求计算为 true,那么将使用与该规则相关联的策略。
规则的布尔表达式的语法和语义类似于结构化查询语言 (SQL) 表达式的 WHERE 子句。更精确地说,表达式的语法由 Java™ Message Service (JMS) 1.1 规范定义。有关更多信息,请阅读“基于规则的请求分类”。
在 JMS 规范中,标识指的是与请求相关联的各种属性,例如,特定查询参数、cookie 或 HTTP 头。JMS 标识可视为请求变量或操作数。这些操作数可以特定于协议。例如,SOAP 服务名称是一个仅在 SOAP 工作类中有效的操作数。
clienthost LIKE '%.ibm.com'
'%.ibm.com' 是字面值,用于与请求的客户机主机名进行比较。此表达式对于所有由 ibm.com® 域中的计算机发出的请求为 true。用单引号将字符串文字括起。不要用单引号将数字文字括起。另外,还可以将括号以及 AND、OR 和 NOT 运算符一起使用以设定复合布尔表达式的格式。请参阅 JMS 1.1 规范以获取详细描述。HTTP 请求操作数
操作数 | 语法 | 描述 |
---|---|---|
客户机主机 |
clienthost | 标准的客户机主机名。这是因特网协议 (IP) 命令主机名的值。此操作数不支持诸如 >、>=、<、<= 这样的数字运算符。 |
客户机 IPV4 |
clientipv4 | 使用因特网协议 V4 (IPv4) 点分四组地址类型 n.n.n.n 的客户机的 IP 地址。 |
客户机 IPV6 |
clientipv6 | 因特网协议版本 6 (IPv6) 128 位地址类型 x:x:x:x:x:x:x:x,符合客户机的请求评论 1924 (RFC 1924)。 |
Cookie 名称 |
cookie$<name> | cookie 名称。 例如,表达式 cookie$My_Cookie_Name='My_Cookie_Value' 对请求进行测试,以查看它是否包含名为 My_Cookie_Name、值为 My_Cookie_Value 的 cookie。要测试是存在还是缺少特定 cookie,请使用下列其中一个表达式:
|
头名称 |
header$<name> | 头名称和值。 例如,表达式 header$Host='localhost' 对请求进行测试,以查看它是否包含值为 localhost 的 HTTP 主机头。要测试是存在还是缺少主机头,请使用下列其中一个表达式:
|
HTTP 方法 |
HTTPMethod | 请求的 HTTP 方法。可能值为 POST、GET、PUT 和 DELETE。 |
MIME 类型 |
MIMEType | 请求的 MIME 类型。 |
百分比 |
percentage$<val> | 百分比操作数对时间的固定百分比求值为 true。 例如,percentage$50 对时间的平均值 50% 求值为 true。 |
端口 |
端口(port) | 接收请求所在的侦听端口。 |
协议 |
协议 | 用于传输请求的通信协议。当前受支持的协议是 HTTP、HTTPS、SOAP 和 SOAPS。 |
查询参数 |
queryparm$<name> | 头名称和值。 例如,表达式 queryparm$timezone='EST' 对请求进行测试,以查看它是否包含名为 timezone、值为 EST 的 HTTP 查询参数。要测试是存在还是缺少查询参数,请使用下列其中一种形式:
|
Rampup |
rampup$<startTime> $<completionTime> |
rampup 操作数对时间的可变百分比求值为 true。在 <startTime> 之前始终会求值为 false,而在 <completionTime> 之后始终求值为 true。时间从 <startTime> 前进到 <completionTime>,求值为 true,以线型百分比的方式增长。 <startTime> 和 <completionTime> 的格式为 day/month/year::hour:min:sec。 其中 day 表示月份中的日期,month 表示月份(Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov 和 Dec),year 是用 4 位数字表示的年份,hour 是用 2 位数字表示的 24 小时制的小时,min 和 sec 分别是用 2 位数字值表示的分钟和秒。例如, rampup$01/Jan/2007::08:00:00$01/Jan/2007::17:00:00 开始在 2007 年 1 月 1 日上午 8 点偶然求值为 true,并且在同一天的下午 5 点 ramp up 完成时一直求值为 true。 |
URI 的方案 |
request.uri.scheme | URI 的方案。 |
服务器主机 |
serverhost | 服务器的标准主机名称。此操作数不支持诸如 >、>=、<、<= 这样的数字运算符。 |
服务器 IPV4 |
serveripv4 | 服务器计算机的 IP 地址,使用 IPv4 点分四段地址类型 n.n.n.n。 |
服务器 IPV6 |
serveripv6 | IPv6 128 位地址类型 x:x:x:x:x:x:x:x,遵循服务器计算机的 RFC 1924 协议。 |
服务 |
服务 | Web Service 的名称。 |
时间 |
time | 用于定义必须执行给定请求的日期和时间。两个可选字段是“开始时间”和“结束时间”。如果在所定义的时间范围以外收到请求,那么将不处理该请求。 “开始时间”和“结束时间”字段都使用以下格式:dayOfWeek/dayOfMonth/month/year::hour:minute:second。 例如,2007 年 4 月 11 日星期四下午 1 点 3 分 45 秒被指定为: Thu/11/Apr/2007::13:03:45 dayofWeek 值为 Sun、Mon、Tue、Wed、Thu、Fri 和 Sat,而 dayOfMonth 值的范围介于 1 至 31。 month 值是表示十二个月的非数字值:Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov 和 Dec。 year 值由表示某个年份的四个数字组成。例如 2007。 hour 值是一天中的某个小时(以 24 小时制表示)。例如,早上 8 点表示为 ::8。minute 和 second 是范围介于 0 至 59 的整数。 注: time 操作数不支持省略号和通配符。
正斜杠(/)用于分隔 date 参数、双冒号(::)用于分隔 hour 参数以及冒号(:)用于分隔 timeOfDay 参数。注意,由使用了 time 操作数的整个规则的布尔结果确定要执行的路由操作。 |
URI |
uri | 统一资源标识 |
虚拟主机 |
virtualhost | 用于对特定主机名配置 Web 应用程序的请求的虚拟主机目标。 |
虚拟端口 |
virtualport | 用于对特定端口配置 Web 应用程序的请求的虚拟端口目标。 |
虚拟门户网站 |
virtualportal | 在 WebSphere® Portal Server 中创建虚拟门户网站,并且 Intelligent Management 支持此操作数以与 WebSphere Portal Server 更好地集成在一起。从请求 URL 中减去 WebSphere Portal 应用程序的 Web 模块的上下文根即可得到虚拟门户网站。如果给定请求与已定义的虚拟门户网站匹配,那么将执行对该规则定义的路由操作。 |
HTTP 响应操作数
当您使用定制日志文件时,除了表 1 中的操作数外,还可以使用下列操作数:操作数 | 语法 | 描述 |
---|---|---|
响应代码 |
response.code | 通过 HTTP 响应代码(如 404 和 503 等)进行过滤。 |
响应时间 |
response.time | 在 ODR 中接收请求时与从 ODR 发送响应之间的时间(以毫秒计)。 |
响应写入错误 |
response.write.error | 将响应写入客户机时,会发生的日志错误。 |
服务时间 |
service.time | 将请求发送到应用程序服务器时与从应用程序服务器接收到响应时之间的时间(以毫秒计)。 |
目标服务器 |
targetserver | 显示发送请求的服务器,格式为 WebSphere Application Server。例如,mycell/mynode/myserver。 |
Xpath 表达式
Xpath 表达式的语法是 xpathexpr,并受 HTTP 支持。
XPath 字符串表达式有一个用于包含 XPath 表达式的必需字段和一个用于定义局部名称空间的可选字段。如果 XPath 表达式中包含的所有名称空间都是标准的,那么第二个字段可以是可选的。如果存在多个局部名称空间,那么使用逗号 (,) 分隔各个局部名称空间。
以下示例显示带有一个局部名称空间定义的 xpathexpr:
xpathexpr$/http:Envelope/soap:Body/m:getTimeZone/n:clientId$n\\=http://test2.classify.ws.ibm.com
= \\'1000\\' or operation IS NOT NULL
在上一表达式中,XPath 表达式是 /http:Envelope/soap:Body/n:getTimeZone/n:clientId。它包含 n 局部名称空间。因此,xpathexpr 的第二个字段定义为 n\\=http://test.classify.ws.ibm.com。美元符号($)用于表示字段定义的开头。在此示例中,双反斜杠是转义序列。第一个等于号(=)是局部名称空间定义的一部分,因此进行了转义,而第二个等于号(=)是分类表达式中的运算符,不能转义。
以下示例显示带有两个局部名称空间的 xpathexpr:
xpathexpr$/http:Envelope/http:Body/m:getTimeZone/n:clientId$m\\=http://test.classify.ws.ibm.com,n\\
=http://test2.classify.ws.ibm.com = \\'1000\\' or operation IS NOT NULL
名称空间 | URL |
---|---|
soap | http://schemas.xmlsoap.org/soap/envelope/ |
soap-env | http://schemas.xmlsoap.org/soap/envelope/ |
soapenc | http://schemas.xmlsoap.org/soap/encoding/ |
soapbind | http://schemas.xmlsoap.org/wsdl/soap/ |
xsd | http://www.w3.org/2001/XMLSchema |
xsi | http://www.w3.org/2001/XMLSchema-instance |
xsi | http://ws-i.org/schemas/conformanceClaim/ |
wsdl | http://schemas.xmlsoap.org/wsdl/ |
运算符
Intelligent Management 支持在下表中的规则表达式中使用运算符。因为这些运算符出现在 WHERE 或 HAVING 子句中,所以在 SQL 术语中也将其称为谓词。运算符不区分大小写。
- 忽略大小写的等于 (EQUALSIGNORECASE): 与 'String = String' 相同,除了会忽略字符串的大小写。因此,'ABC' EQUALSIGNORECASE 'abc' 将求值为 true。('ABC' = 'abc') 求值为 false。
- 不等于 ( <> ):“不等于”运算符表示操作数的值不等于您输入的值。
- 属于 (IN):此运算符在单个表达式中使用多个值来表示一个操作数。例如,对于名为 port 的操作数,如果要表示端口值可以是任何值或所有值,例如 9080、9090 和 9091,则表达式片段为 port IN (9080,9090,9091)。括号内值的表示方式取决于 port 的数据类型。如果端口是整数,那么正确的语法是一些不带引号的值。如果 port 为字符串,那么正确的语法是 port IN (‘9080’,‘9090’,‘9091’)。
- 模式匹配 (LIKE):此运算符表示针对字符串操作数值的模式匹配。值必须在模式匹配开始的位置中包含通配符百分号 (%)。例如,表达式 host LIKE %blanca 表示与单词 blanca 或者任何其他以 blanca 结尾的单词匹配;表达式 host LIKE blanca% 表示与单词 blanca 或者任何其他以 blanca 开头的单词匹配;表达式 host LIKE %blanca% 表示与单词 blanca 或者任何嵌入了 blanca 的单词匹配。
- 忽略大小写的模式匹配 (LIKEIGNORECASE):与 'string like string' 相同,除了会忽略字符串的大小写。
- 不为 Null (IS NOT NULL):此运算符表示以下情况:对查询的验证显示存在所请求参数。
- 连接 (+):此运算符表示将两个字符串连接到一起:'abc' + 'def' = 'abcdef'。
- 模式匹配属于 (LIKEIN):此运算符表示当“likein”左侧的字符串与一个或多个字符串 (stringN) 匹配时,string likein (string1, string2, string3, etc.) 求值为 true。
- 为 Null (IS NULL):此运算符表示以下情况:对查询的验证显示不存在所请求参数。
- 等于 ( = ):“等于”运算符表示以区分大小写方式进行匹配。