DataScript は仮想サービスに適用されます。各 DataScript は、仮想サービスが HTTP 要求や HTTP 応答を受信するときなど、イベントがトリガされたときに実行されます。各 DataScript オブジェクトには、少なくとも 1 つ以上のイベントが含まれます。

1 つの仮想サービスに、複数の DataScript が適用される場合があります。複数の DataScript が HTTP 要求などの同じイベントを使用する場合、仮想サービスに割り当てられた DataScript の順序は、DataScript の処理順序と見なされます。たとえば、最初の DataScript が /secure ディレクトリへのすべてのクライアント要求を破棄するように設定されていて、2 つ目の DataScript が、/secure ディレクトリへの要求を行う認証されたすべてのクライアントを別のパスにリダイレクトするように設定されている場合、2 つ目の DataScript は実行されません。

次のイベントがサポートされます。

イベント

説明

HTTP_REQ

このイベントは、HTTP 要求の要求行とすべてのヘッダーが正常に解析された場合に、潜在的な POST 本文が受信される前にトリガされます。

HTTP_RESP

このイベントは、HTTP 応答の応答状態行とすべてのヘッダーが正常に解析された場合に、応答本文が受信される前にトリガされます。

RESP_FAILED

このイベントは、サーバから有効な応答ヘッダーを受信してクライアントに転送する前に、エラー/タイムアウトが発生するとトリガされます。RESP_FAILED イベントから呼び出すことができる HTTP 関数は、次の 3 つのみです。

  • 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 オブジェクトを参照するように構成できます。HTTP 要求イベントで DataScript を使用するには、アプリケーション タイプ HTTP に仮想サービスを構成する必要があります。

各仮想サービス オブジェクトは、任意の数の DataScript を参照できます。構成時にすべての DataScript が解析されます。したがって、誤った DataScript を使用すると、ユーザーが新しい DataScript または変更された DataScript を保存しようとすると失敗します。構成時のエラーは、デバッグの補助として報告されます。

DataScript の実行に失敗すると、その HTTP 要求または応答のスクリプト実行は途中で終了します。HTTP 内部サーバ エラーがクライアントに送信され、デバッグに役立つ途中で終了したスクリプトのスタック トレースを使用してクライアント ログが生成されます。