ADC

テキスト式について

Citrix ADCアプライアンスを通過するテキストを操作するために、さまざまな式を設定できます。次に、デフォルトの構文式を使用してテキストを解析する方法の例を示します。

  • 特定の HTTP ヘッダーが存在することを確認します。

    たとえば、特定のサーバーに要求を転送するために、特定の Accept-Language ヘッダーを含む HTTP 要求を識別できます。

  • 特定の HTTP URL に特定の文字列が含まれているかどうかを判断します。

    たとえば、特定の URL に対するリクエストをブロックできます。文字列は、別の文字列の先頭、中間、または末尾に発生する可能性があります。

  • 特定のアプリケーションに送信される POST 要求を識別します。

    たとえば、キャッシュされたアプリケーションデータを更新するために、データベースアプリケーションに送信されるすべての POST 要求を識別できます。

HTTP リクエストとレスポンスのデータストリームを表示するための特別なツールがあることに注意してください。ツールを使用して、データストリームを表示できます。

テキストの操作について

テキストベースの式は、データの要素を識別するための少なくとも 1 つのプレフィックスと、通常は (必ずしもそうではありませんが) そのプレフィックスに対する操作で構成されます。テキストベースの操作は、リクエストまたはレスポンスの任意の部分に適用できます。テキストの基本的な操作には、さまざまなタイプの文字列の一致が含まれます。

たとえば、次の式は、ヘッダー値を文字列と比較します。

http.req.header("myHeader").contains("some-text")

次の式は、リクエスト内のファイルタイプの一致の例です。

http.req.url.suffix.contains("jpeg")

http.req.url.suffix.eq("jpeg")

前述の例では、contains 演算子は部分一致を許可し、eq 演算子は完全一致を検索します。

評価する前に文字列をフォーマットするための他の操作も使用できます。たとえば、テキスト操作を使用して、引用符や空白を取り除いたり、文字列をすべての小文字に変換したり、文字列を連結したりできます。

注記:

複雑な操作を使用して、パターンに基づいてマッチングを実行したり、あるタイプのテキストフォーマットを別のタイプに変換したりできます。

詳しくは、次のトピックを参照してください:

テキスト式の複合と優先順位

さまざまな演算子を適用して、テキストのプレフィックスや式を組み合わせることができます。たとえば、次の式は、各プレフィックスの戻り値を連結します。

http.req.hostname + http.req.url

次に、論理 AND を使用する複合テキスト式の例を示します。この式の両方のコンポーネントは、式と一致する要求に対して TRUE である必要があります。

http.req.method.eq(post) && http.req.body(1024).startswith("destination=")

メモ:

コンパウンドの演算子の詳細については、「 複合高度なエクスプレッション」を参照してください。

テキスト式のカテゴリ

設定できるテキスト式の主なカテゴリは次のとおりです。

注:

POSTリクエストの本文などのドキュメント本体を解析すると、パフォーマンスに影響を与える可能性があります。ドキュメント本体を評価するポリシーのパフォーマンスへの影響をテストできます。

テキスト式のガイドライン

パフォーマンスの観点からは、通常、式内でプロトコル対応関数を使用するのが最適です。たとえば、次の式は、プロトコル対応関数を使用します。

HTTP.REQ.URL.QUERY

前の式は、文字列の解析に基づく次の同等の式よりも優れています。

HTTP.REQ.URL.AFTER_STR("?")

最初のケースでは、式は URL クエリを具体的に調べます。2 番目のケースでは、式は疑問符が最初に出現するデータをスキャンします。

また、次の式のように、テキストの構造化解析によるパフォーマンス上の利点もあります。

HTTP.REQ.HEADER("Example").TYPECAST_LIST_T(',').GET(1)

(型キャストの詳細については、 データの型キャストを参照してください。カンマ区切りのデータを収集してリストに構造化する型キャスト式は、通常、次の非構造化同等のものよりも優れています。

HTTP.REQ.HEADER("Example").AFTER_STR(",").BEFORE_STR(",")

最後に、非構造化テキスト式は、通常、正規表現よりもパフォーマンスが優れています。たとえば、構造化されていないテキスト式を次に示します。

HTTP.REQ.HEADER("Example").AFTER_STR("more")

前の式は、通常、正規表現を使用する次の同等のものよりも優れたパフォーマンスを提供します。

HTTP.REQ.HEADER("Example").AFTER_REGEX(re/more/)

正規表現の詳細については、「 正規表現」を参照してください。

テキスト式について