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

  • 如果在从服务器收到有效的响应标头并将其转发到客户端之前发生任何错误/超时,将触发此事件。只有 3 个 HTTP 函数可以从 RESP_FAILED 事件中调用:

  • avi.http.response()

  • avi.http.redirect()

  • avi.http.internal_status()

所有其他 HTTP 函数将返回 ERROR,并且客户端连接将提前结束。

发生 RESP_FAILED 事件的示例包括:

  • 与后端服务器的 TCP/SSL 连接/握手失败

  • 请求代理/发送到后端服务器超时

  • 服务器没有响应标头或只有部分响应标头,或者响应标头错误

  • NSX Advanced Load Balancer 等待后端服务器响应时,服务器重置连接

L4 请求

SSL 握手后,从客户端收到负载时运行 DataScript。

L4 响应

从服务器收到数据包时运行 DataScript。

SSL_HANDSHAKE_DONE

SSL 握手完成后运行 DataScript。

引入了以下事件,以将 SSL 握手级别事件添加到读/写参数,从而控制 SSL 握手并更改 SSL 配置文件、证书、PKI 设置、重新协商等属性:

事件

描述

SSL_PRE_CONNECT

此事件在 TLS 握手开始时触发。此事件可用于根据客户端 IP 或 VS 服务端口来更改 SSL 设置,如 SSL 配置文件、SSLKeyandCertificate 和 PKI 配置文件等。

SSL_Client_Hello

此事件在完成客户端 hello 预处理后触发。此事件用于根据客户端 IP 或 VS 服务端口来更改 SSL 设置,如 SSL 配置文件、SSLKeyandCertificate 和 PKI 配置文件等。

SSL_HANDSHAKE_DONE

此事件在 TLS 握手完成后触发。此事件可用于获取客户端证书身份验证错误和日志记录。

注: