DataScript 将连接到虚拟服务。每个 DataScript 都在触发某个事件时执行,例如,在虚拟服务收到 HTTP 请求或 HTTP 响应时执行。每个 DataScript 对象至少包含一个事件,可能会包含更多事件。

虚拟服务可能附加有多个 DataScript。如果多个 DataScript 使用相同的事件(例如 HTTP 请求),那么分配给虚拟服务的 DataScript 的顺序将被视为 DataScript 的处理顺序。例如,如果将第一个 DataScript 设置为放弃对 /secure 目录的所有客户端请求,将第二个 DataScript 设置为将向 /secure 目录发出的请求的所有经过身份验证的客户端重定向到其他路径,则永远不会执行第二个 DataScript。

受支持的事件包括:

事件

描述

HTTP_REQ

此事件在已成功解析 HTTP 请求的请求行和所有标头后,收到任何潜在的 POST 正文之前触发。

HTTP_RESP

此事件在已成功解析 HTTP 响应的响应状态行和所有标头后,收到响应正文之前触发。

RESP_FAILED

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

  • avi.http.response()

  • avi.http.redirect()

  • avi.http.internal_status()

    所有其他 HTTP 函数将返回错误,并且客户端连接将提前结束。发生 RESP_FAILED 事件的示例包括:

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

  • 请求代理到后端服务器超时。

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

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

LB_DONE

此事件在完成服务器选择后,但在与后端服务器建立连接之前触发。此事件允许在完成服务器选择后配置各种策略。

以下是此事件支持的 DataScript API:

通过此对象模型,可灵活创建 DataScript 库。可以将虚拟服务配置为引用此库中的任何 DataScript 对象,前提是该对象属于与 DataScript 事件相同的协议。要将 DataScript 与 HTTP 请求事件结合使用,必须为应用程序类型 HTTP 配置虚拟服务。

每个虚拟服务对象都可以引用任意数量的 DataScript。所有 DataScript 均在配置期间进行解析。因此,在用户尝试保存新的或修改后的 DataScript 时,任何不正确的 DataScript 都将导致失败。报告配置时间错误是为了帮助调试。

当 DataScript 执行遇到故障时,该 HTTP 请求或响应的脚本执行会提前结束。将向客户端发送 HTTP 内部服务器错误,并使用已提前结束执行脚本的堆栈跟踪生成客户端日志以帮助调试。