DataScript 在数据平面流量触发各种事件时运行。在发生不同事件时,单个规则可能会运行不同的代码。
许多 DataScript 函数仅在特定事件中可用。例如,avi.http.redirect
只能在 HTTP 请求事件中使用,而 avi.http.response
函数可以在 HTTP 请求或 HTTP 响应事件中使用。
DataScript 函数(如 avi.http.method)可以在请求或响应事件中使用,即使返回的数据是专门来自客户端的 HTTP 请求也是如此。某些 DataScript 函数可能包含上下文参数,这意味着,虽然可以在任何事件期间调用该函数,但它会从显式事件中获取数据。相关知识库文章中列出了任何函数的上下文参数允许的值。
以 avi.http.get_header 为例。在 HTTP 响应事件期间实现该参数将从服务器的响应返回标头。但是,通过将上下文参数集添加到 avi.HTTP_REQUEST
,可以在响应事件期间检索和评估来自客户端请求的标头。
if avi.http.get_header("my_header", avi.HTTP_REQUEST) then avi.http.close_conn() end
虽然上面的 DataScript 可以应用于 HTTP 请求或响应事件,但由于可选的上下文参数,将明确检查客户端请求中的标头。
支持的 DataScript 事件
事件 |
描述 |
---|---|
HTTP_AUTH |
此事件在客户端身份验证之前触发 |
HTTP_POST_AUTH |
此事件在客户端身份验证之后触发 |
HTTP_REQ |
此事件在已成功解析 HTTP 请求的所有标头后,收到任何潜在的 POST 正文之前触发。 |
HTTP_RESP |
此事件在已成功解析 HTTP 响应的所有标头后,收到响应正文之前触发。 |
RESP_FAILED |
所有其他 HTTP 函数将返回 ERROR,并且客户端连接将提前结束。 发生 RESP_FAILED 事件的示例包括:
|
L4 请求 |
SSL 握手后,从客户端收到负载时运行 DataScript。 |
L4 响应 |
从服务器收到数据包时运行 DataScript。 |
SSL_HANDSHAKE_DONE |
SSL 握手完成后运行 DataScript。 |
事件 |
描述 |
---|---|
SSL_PRE_CONNECT |
此事件在 TLS 握手开始时触发。此事件可用于根据客户端 IP 或 VS 服务端口来更改 SSL 设置,如 SSL 配置文件、SSLKeyandCertificate 和 PKI 配置文件等。 |
SSL_Client_Hello |
此事件在完成客户端 hello 预处理后触发。此事件用于根据客户端 IP 或 VS 服务端口来更改 SSL 设置,如 SSL 配置文件、SSLKeyandCertificate 和 PKI 配置文件等。 |
SSL_HANDSHAKE_DONE |
此事件在 TLS 握手完成后触发。此事件可用于获取客户端证书身份验证错误和日志记录。 |
要了解事件的实现顺序,请参阅 DataScript 执行优先级。
有关 L4 SSL DataScript 的更多详细信息,请参阅 L4 DataScript。