ヘッダーをスキップ

Oracle Application Server Web Cache 管理者ガイド
10gリリース2(10.1.2)
B15770-04
目次
目次
索引
索引

戻る 次へ

16
Edge Side Includes(ESI)言語タグ

この章では、動的フラグメントを使用したコンテンツ・アセンブリに提供されているEdge Side Includes(ESI)タグについて説明します。

この章の項目は次のとおりです。

ESIの概要

ESIはオラクル社が共同開発に参加したオープン仕様です。クライアントとオリジナル・サーバー間のサロゲートまたはプロキシとして配置され、動的コンテンツのキャッシュで動的ページを組み立てるための統一プログラミング・モデルの開発を目的としています。

ESIは、OracleAS Web Cacheによるフラグメントの動的コンテンツ・アセンブリを可能にするXMLに類似したマークアップ言語です。テンプレート・ページにESIマークアップ・タグを設定し、このタグによって動的HTMLフラグメントを取得および挿入します。フラグメント自体にESIマークアップを含めることも可能です。テンプレート・ページおよびHTMLフラグメントにキャッシュ・ルールを割り当てることができます。オリジナル・サーバーではなく、OracleAS Web Cacheでページ・アセンブリを実行可能にすることによって、キャッシュ・ヒット率が高くなり、パフォーマンスが向上します。

関連項目

 

次の項で、ESIの使用方法の概要を説明します。

Surrogate-Controlレスポンス・ヘッダーでのESI言語要素のサポートについて

OracleAS Web CacheでESIタグを処理できるように、ESIタグを使用するページのHTTPレスポンス・メッセージに、HTTP Surrogate-Controlレスポンス・ヘッダー・フィールドを設定します。

OracleAS Web CacheがサポートするESI言語タグ、要素および属性を、表16-1に示します。一番右の列には、各ESIタグ、属性または要素をサポートする機能セットがすべて指定されています。たとえば、<esi:invalidate>タグをサポートしているのは、"ESI-INV/1.0"機能セットのみです。OracleAS Web Cacheで処理を正確に実行するために、Surrogate-Controlレスポンス・ヘッダーのcontent制御ディレクティブで、ESIテンプレートが使用するすべての機能セットを指定します。ただし、直接または間接的にテンプレートに挿入されるESIフラグメント内で使用される機能セットを指定する必要があります。たとえば、ESIテンプレートに、<esi:invalidate>タグおよび<esi:log>要素を含む<esi:environment>タグが使用されている場合は、次のように、content制御ディレクティブに、"ESI-INV/1.0""ORAESI/9.0.4"を含める必要があります。

Surrogate-Control: content="ESI-INV/1.0 ORAESI/9.0.4"

関連項目

Surrogate-Controlレスポンス・ヘッダーの詳細および構成方法は、「Surrogate-Controlレスポンス・ヘッダーをキャッシュ・ルールの代替として使用」を参照してください。 

表16-1    ESI言語の機能 
ESI言語の機能  関連項目  Surrogate-Controlレスポンス・ヘッダーのcontent="value"制御ディレクティブでサポートされる機能 

<esi:choose> | <esi:when> | <esi:otherwise>タグ 

「ESIのchoose | when | otherwiseタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

<esi:comment>タグ 

「ESIのcommentタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

<esi:environment>タグ 

「ESIのenvironmentタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

<esi:include>タグ 

「ESIのincludeタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

<esi:environment>タグおよび<esi:include>タグの属性と要素 

  

  

alt属性 

「ESIのincludeタグ」 

"ORAESI/9.0.4"

"ESI/1.0" 

max-age属性 

「ESIのincludeタグ」

「ESIのenvironmentタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

onerror属性 

「ESIのincludeタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

src属性 

「ESIのincludeタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

timeout属性 

「ESIのincludeタグ」

「ESIのenvironmentタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

<esi:log>要素 

「ESIのincludeタグ」

「ESIのenvironmentタグ」 

"ORAESI/9.0.4" 

<esi:request_header>要素 

「ESIのincludeタグ」

「ESIのenvironmentタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

<esi:request_body>要素 

「ESIのincludeタグ」

「ESIのenvironmentタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

<esi:inline>タグ 

「ESIのinlineタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0" 

name属性 

「ESIのinlineタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0" 

fetchable属性 

「ESIのinlineタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0" 

max-age属性 

「ESIのinlineタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

timeout属性 

「ESIのinlineタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2" 

<esi:invalidate>タグ 

「ESIのinvalidateタグ」 

"ESI-INV/1.0" 

<esi:remove>タグ 

「ESIのremoveタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

<esi:try> | <esi:attempt> | <esi:accept>タグ 

「ESIのtry | attempt | exceptタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

<esi:vars>タグ 

「ESIのvarsタグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

<!--esi...-->タグ 

「ESIの<!--esi-->タグ」 

"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0" 

関連項目

ESI言語1.0仕様およびEdgeアーキテクチャ仕様の詳細は、http://www.esi.org/を参照してください。 

キャッシュ・オブジェクトに対するSurrogate-Capabilityリクエスト・ヘッダーについて

OracleAS Web Cacheによりリクエストされる各オブジェクトに対して、Surrogate-Capabilityリクエスト・ヘッダー・フィールドがオブジェクトのHTTPリクエスト・メッセージに追加されます。Surrogate-Capabilityリクエスト・ヘッダー・フィールドは次の目的に使用できます。

Surrogate-Capabilityリクエスト・ヘッダーにより、OracleAS Web Cacheは、キャッシュとして機能するオリジナル・サーバーに対して実行可能な操作を識別できます。Surrogate-Capabilityリクエスト・ヘッダー・フィールドは次のような構文をサポートします。

Surrogate-Capability: orcl="operation_value operation_value ..."

"operation_value"は次の値を示します(複数可)。

"ORAESI/9.0.2""ESI/1.0"および"ESI-Inline/1.0"は、"ORAESI/9.0.4"のサブセットです。このリリースでは、ESIアセンブリに"ORAESI/9.0.4"のみを、インライン無効化に"ESI-INV/1.0"のみを、パーソナライズ属性に"webcache/1.0"のみを指定する必要があります。

関連項目

各"operation_value"に対してサポートされるESIタグの詳細は、表16-2を参照してください。 

構文規則

ESIの要素と属性はXML構文に準拠しますが、HTMLやXMLオブジェクトなど、他のオブジェクトに埋込み可能です。OracleAS Web Cacheによってページが処理される際、ESI要素自体は出力から削除されます。

ESI構文は、基本的にXML構文規則に準拠します。タグの使用の際には、次の点に注意してください。

要素のネスト

例16-1に示すように、ESIタグにはESI要素およびその他のHTMLマークアップをネストすることが可能です。

例16-1    ESI要素のネスト

<esi:choose>
  <esi:when test="$(HTTP_HOST) == 'www.company.com'">
    <esi:include src="/company.html" />
    <h4>Another</h4>
    <esi:include src="/another.html" />
  </esi:when>
  <esi:when test="$(HTTP_COOKIE{fragment) == 'First Fragment'">
    <esi:try>
      <esi:attempt>
        <esi:include src="/fragment1.html" />
      </esi:attempt>
      <esi:except>
        <esi:choose>
          <esi:when test="$(HTTP_COOKIE{otherchoice}) == 'image'" >
            <img src="/img/TheImage.gif">
          </esi:when>
          <esi:otherwise>
            The fragment is unavailable.
         </esi:otherwise>
        </esi:choose>
      </esi:except>
    </esi:try>
  </esi:when>
  <esi:otherwise>
   The default selection.
  </esi:otherwise>
</esi:choose>

変数式

ESIでは、<esi:environment>タグとともに使用されるHTTPリクエスト変数および環境変数をサポートしています。

この項では、次の項目について説明します。

変数の使用方法

変数を参照するには、ドル記号の接頭辞を入力し、変数名をカッコで囲みます。

$(VARIABLE_NAME)

次に例を示します。

$(HTTP_HOST)

変数には、次のように、キーを使用してアクセスします。

$(VARIABLE_NAME{key})

変数のサブストラクチャにアクセスするには、アクセスするキーを中カッコで囲み、それを変数名に追加します。次に例を示します。

$(HTTP_COOKIE{username})

キーには大文字・小文字の区別とオプションがあります。キーを指定しない場合は、環境変数によって環境フラグメントの全内容が返されます。環境が空かどうかをテストする場合のみ、キーなしで環境変数を指定するようお薦めします。次のESIマークアップでは、$(logindata)null値に対して評価される変数です。

<esi:environment src="/getlogindata" name="logindata"/>
<esi:include src="/login/$(logindata{account})"/">
<esi:choose>
  <esi:when test="$(logindata) != null">
    <esi:include src="/login/$(logindata{account})"/>
 </esi:when>
 <esi:otherwise>
   <esi:include src="/login/guest.html"/>
 <esi:otherwise>
</esi:choose>

変数のデフォルト値

論理演算子OR(|)を使用すると、次の書式でデフォルト値を指定できます。

$(VARIABLE|default)

変数にデフォルト値を使用するのは、変数またはそのキーが存在しない場合のみです。変数が空の文字列と評価された場合は、デフォルト値ではなく、空の文字列が返されます。

次の例では、リクエストにCookie idが存在しない場合、OracleAS Web Cacheによってhttp://example.com/default.htmlが取得されます。

<esi:include src="http://example.com/$(HTTP_COOKIE{id}|default).html"/>

他のリテラルと同様に、空白を指定する必要がある場合は、デフォルト値を引用符で囲む必要があります。次に例を示します。

$(HTTP_COOKIE{first_name}|'new user')


注意

HTTP_HOSTおよびHTTP_REFERERはデフォルト値をサポートしていません。 


HTTPリクエスト変数

表16-2に、ESIでサポートされているHTTPリクエスト変数を示します。次のことに注意してください。

例外およびエラー

ESIでは、ESIフラグメント・リクエスト時に発生した例外の処理に、複数のメカニズムを使用します。開発しているビジネス・ロジックによって、特定の状況で、すべてのメカニズムを同時に使用、または1つのみを使用できます。

最初のメカニズムはESI言語に含まれているもので、エラー発生時のコンテンツ・アセンブリを詳細に制御するために3つの要素が提供されています。

<esi:include>タグのsrc属性を使用して指定したフラグメントがフェッチできない場合は、alt属性を使用して指定したフラグメントを代替として使用します。alt属性を使用しない場合、またはフラグメントがフェッチできない場合は、onerror属性を使用します。onerror属性をtry |attempt |exceptブロックの前に使用します。try |attempt |exceptブロックが存在しない場合は、例外処理が親またはテンプレート・ページに伝播されます。ESI言語制御がすべて失敗した場合、OracleAS Web Cacheでは、フラグメントのかわりに使用するデフォルトのページが表示されます。

関連項目

 


ESIタグの説明

この項では、ページの部分的なキャッシュ処理に使用されるESIタグについて説明します。次のものがあります。


ESIのchoose | when | otherwiseタグ

<esi:choose><esi:when>および<esi:otherwise>条件タグにより、ブール式に基づいてロジックを実行することが可能になります。

構文

<esi:choose>
  <esi:when test="BOOLEAN_expression">
    Perform this action
  </esi:when>
  <esi:when test="BOOLEAN_expression">
    Perform this action
  </esi:when>
  <esi:otherwise>
    Perform this other action
  </esi:otherwise>
</esi:choose>

属性

test: ブール操作を指定します。

使用方法

ブール式

test属性では、trueまたはfalse論理の評価方法を決定するためにブール式を使用します。ESIでは、次のブール演算子をサポートしています。

ブール式の使用方法に関して、次の点に注意してください。

次の式に、ブール演算子の正しい使用方法を示します。

!(1==1)
!('a'<='c')
(1==1)|('abc'=='def')
(4!=5)&(4==5)

次の式に、ブール演算子の誤った使用方法を示します。

(1 & 4)
("abc" | "edf")

文は、<esi:when>または<esi:otherwise>サブタグ内に使用する必要があります。サブタグの外の文は、条件として評価されません。例16-2に、文の無効な配置を示します。

例16-2    文の配置

<esi:choose>
  This markup is invalid because any characters other than whitespace 
  are not allowed in this area.
  <esi:when test="$(HTTP_HOST) == 'www.company.com'">
    <esi:include src="/company.html" />
  </esi:when>
     This markup is invalid because any characters other than whitespace 
     are not allowed in this area.
  <esi:when test="$(HTTP_COOKIE{fragment) == 'First Fragment'">
    <img src="/img/TheImage.gif">
  </esi:when>
     This markup is invalid because any characters other than whitespace 
     are not allowed in this area.
   <esi:otherwise>
     The default selection.
  </esi:otherwise>
   This markup is invalid because any characters other than whitespace 
   are not allowed in this area.
</esi:choose>

次のESIマークアップには、Cookie Advancedを使用するリクエスト用のadvanced.html、およびCookie Basicを使用するリクエスト用のbasic.htmlが含まれています。

<esi:choose>
  <esi:when test="$(HTTP_COOKIE{group})=='Advanced'">
    <esi:include src="http://www.company.com/advanced.html"/>
  </esi:when>
  <esi:when test="$(HTTP_COOKIE{group})=='Basic User'">
    <esi:include src="http://www.company.com/basic.html"/>
  </esi:when>
  <esi:otherwise>
    <esi:include src="http://www.company.com/new_user.html"/>
  </esi:otherwise>
</esi:choose>

ESIのcommentタグ

<esi:comment>タグにより、出力に表示されない、ESIの指示に関するコメントを追加できます。

構文

<esi:comment text="text commentary"/>

<esi:comment>は空の要素で、終了タグは存在しません。

使用方法

<esi:comment>タグは、OracleAS Web Cacheによって評価されません。コメントをHTML出力で表示するには、標準のXML/HTMLコメント・タグを使用してください。

次のESIマークアップには、挿入されているGIFファイルに関するコメントが含まれています。

<esi:comment text="the following animation will have a 24 hour TTL"/>
<esi:include src="http://www.company.com/logo.gif" onerror="continue" />


ESIのenvironmentタグ

<esi:environment>タグによって、挿入されたフラグメントのカスタム環境変数を含めることができます。いったん含めると、これらの変数は他のESIタグとともに使用できます。

構文

このタグの書式は2つあります。最初の書式では、<esi:environment>には、終了のための</esi:environment>タグが存在しません。

<esi:environment src="environment_URL" name="environment_name"
[max-age="expiration_time [+ removal_time]]" [method="GET|POST"] [onerror="continue"] [timeout="fetch_time"]/>

要素を含む2番目の形式では、<esi:environment>には、終了のための</esi:environment>タグが存在します。

<esi:environment src="environment_URL" name="environment_name"
   [max-age="expiration_time [+ removal_time]"] [method="GET|POST"]
   [onerror="continue"] [timeout="fetch_time"]>
  [<esi:request_header name="request_header" value="value"/>]
  [<esi:request_body value="value"/>]
  [<esi:log>log_message</esi:log>]
</esi:environment>

属性

要素

構文の使用方法

次のESI出力は、logindataを指定して、catalog.xmlに格納されている環境変数を参照します。ファイルcatalog.xmlによりvendorID環境変数の値にアクセスできます。この値は挿入されたURLのパラメータとして使用されます。

<esi:environment src="/catalog.xml" name="logindata"/>
<esi:include 
src="http://provider.com/intranetprovider?vendorID=$(logindata{vendorID})"/>

ファイルcatalog.xmlの内容は、次のとおりです。

<?xml version="1.0"?>
<esi:environment esiversion="ORAESI/9.0.4">
  <product_description>stereo</product_description>
  <vendorID>3278</vendorID>
  <partner1>E-Electronics</partner1>
  <partner2>E-City</partner2>
</esi:environment>

次のESI出力は、logindataを指定して、env.datに格納されている環境変数を参照します。ファイルenv.datにより、env環境変数の値にアクセスできます。この値は、dir1.txtに対して挿入されたログ・メッセージのパラメータとして使用されます。x-esi-infoログ・フィールドが設定済で、フラグメントがリクエストされると、dir1.txtesi-log2.htmlのログ・メッセージが、access_log.fragmentファイルに書き込まれます。

<esi:environment src="/esi/env.dat" name="env">
  <esi:log>Used environment /esi/env.dat</esi:log>
</esi:environment>

<esi:include src="/cached/dir1.txt">
  <esi:log>Fragment:/cache/dir1.txt is included, by $(env{xl_name})</esi:log>
</esi:include>

<font color="red">Including /cgi-bin/esi-fetch.sh?/esi/esi-log2.html in esi-log1.html 
</font>
<esi:include src="/cgi-bin/esi-fetch.sh?/esi/esi-log2.html">
  <esi:log>Fragment: /cgi-bin/esi-fetch.sh?/esi/esi-log2.html is included
 </esi:log>


ESIのincludeタグ

<esi:include>タグにより、フラグメントの挿入に使用する構文が提供されます。

関連項目

<esi:inline>および<esi:include>の使用方法の比較は、「inlineタグおよびincludeタグによる断片化」を参照してください。 

構文

このタグの書式は2つあります。最初の形式では、<esi:include>には、終了のための</esi:include>タグが存在しません。

<esi:include src="URL_fragment" [alt="URL_fragment"]
[max-age="expiration_time [+removal_time]]" [method="GET|POST"] [onerror="continue"] 
[redirect=yes|no] [timeout="fetch_time"]/>

要素を含む2番目の形式では、<esi:include>には、終了のための</esi:include>タグが存在します。

<esi:include src="URL_fragment" [alt="URL_fragment"]
   [max-age="expiration_time[+removal_time]"] [method="GET|POST"]
   [onerror="continue"] [redirect=yes|no] [timeout="fetch_time"]>
  [<esi:request_header name="request_header" value="value"/>]
  [<esi:request_body value="value"/>]
  [<esi:log>log_message</esi:log>]
</esi:include>

属性

要素

構文の使用方法

使用方法

<esi:include>タグにより、src属性で指定されているフラグメントを取得するよう、OracleAS Web Cacheに指示します。

処理が正しく実行されると、srcで指定されたURLから取得されたコンテンツが表示されます。オブジェクトは、includeタグの場所に挿入されます。たとえば、includeタグが表セル内に存在する場合、取得されたオブジェクトは表セル内に表示されます。

Surrogate-Controlレスポンス・ヘッダー・フィールドのmax-age制御ディレクティブはレスポンスに適用されます。max-age属性は、<esi:include>タグを介して、特定の使用方法のフラグメント・レスポンスにのみ適用されます。Surrogate-Controlレスポンス・ヘッダー・フィールドのmax-age制御ディレクティブとmax-age属性の両方が設定されている場合、この特定の組込みに対する有効期限と削除TTLはそれぞれ、長い時間が設定されている方になります。特定ページのフラグメントの失効に対する許容値の方が大きい場合は、max-age属性をmax-age制御ディレクティブより長い時間に設定します。max-age属性を使用して、削除時間までフラグメントを無効化した状態で表示することにより、キャッシュ・ヒットを増やします。max-age=infinityは、オブジェクトを期限切れにしないように指定します。

methodが設定されていない場合は、GETとみなされます。request_body要素が設定されている場合は、POSTとみなされます。

OracleAS Web Cacheにより、すべてのフラグメント・リクエストについて次のHTTPリクエスト・ヘッダーが生成されます。

request_header要素により、前述以外のHTTPヘッダーを制御できます。前述のHTTPリクエスト・ヘッダーをrequest_header属性として指定しないでください。競合が生じてOracleAS Web Cacheの動作に影響することがあります。

request_header要素が指定されていない場合、OracleAS Web Cacheでは親ページから他のリクエスト・ヘッダーを使用します。

関連項目

<esi:inline>および<esi:include>の使用方法の比較は、「inlineタグおよびincludeタグによる断片化」を参照してください。 

次のESIマークアップには、frag1.htmというファイルが含まれています。フラグメントは60秒以内に取得されます。取得に失敗した場合、OracleAS Web Cacheはincludeを無視し、ページを表示します。取得に成功した場合、OracleAS Web Cacheによってフラグメントが含まれます。OracleAS Web Cacheにより、フラグメントは5分後に期限切れになり、その8分後に削除されます。

<esi:include src="/frag1.htm" timeout="60" maxage="300+480" onerror="continue"/>

次のESI出力には、動的問合せの結果が含まれます。

<esi:include src="/search?query=$QUERY_STRING(query)"/>

次のESI出力には、パーソナライズされた挨拶文、Cookie HTTPリクエスト・ヘッダーおよび日付を含むHTTPリクエスト・ボディが含まれます。x-esi-infoログ・フィールドが設定済で、フラグメントがリクエストされると、ログ・メッセージ"Fragment:/Personalized Greeting is included"が、access_log.fragmentファイルに書き込まれます。

<esi:include src="/PersonalGreeting">
  <esi:request_header name="Cookie" value="pname=Scott Tiger"/>
  <esi:request_body value="day=05, month=10, year=2001"/>
  <esi:log>Fragment: /Personalized Greeting is included</esi:log>
</esi:include>

関連項目

<esi:include>の具体的な使用例は、「ポータル・サイトの実装の例」を参照してください。 


ESIのinlineタグ

<esi:inline>タグは、フラグメントを他のオブジェクトのHTTPレスポンスに埋め込まれた、別のキャッシュ可能なフラグメントとしてマークします。OracleAS Web Cacheでは、これらのフラグメントを独立した<esi:include>フラグメントとして格納しアセンブルします。

関連項目

<esi:inline>および<esi:include>の使用方法の比較は、「inlineタグおよびincludeタグによる断片化」を参照してください。 

構文

<esi:inline name="URL" fetchable="yes|no"
 [max-age="expiration_time [+ removal_time]"] [timeout="fetch_time"]
 Embedded HTML code
</esi:inline>

属性

使用方法

一部のinlineフラグメントは、他のオブジェクトのHTTPレスポンスの一部としてのみ配信されます。OracleAS Web Cacheでは、これらのフラグメントを<esi:include>フラグメントを取得するように、個々に取得できません。OracleAS Web Cacheでフェッチ不可なフラグメントが必要な場合、OracleAS Web Cacheはinlineフラグメントが抽出されたオブジェクトをリクエストする必要があります。

フェッチ不可な<esi:inline>フラグメントがキャッシュ内で見つからない場合、フラグメントの親テンプレートがOracleAS Web Cacheによって再フェッチされます。この動作は、親テンプレートがさらにフェッチ不可な<esi:inline>フラグメントであってはならないということを示唆しています。親もフェッチ不可な<esi:inline>フラグメントであった場合、ブラウザに返されるレスポンスは未定義になります。

関連項目

 

次のESIの出力には、金融のヘッドラインが埋め込まれています。

<esi:inline name="/Top_News_Finance">
Latest News for Finance
<TABLE>
  <TR>
    Blue-Chip Stocks Cut Losses; Nasdaq Up MO
    French rig factory with explosives New York Times
    Volkswagen faces Brazil strike CNN Europe
    Airbuss reliability record BBC
  </TR>
</TABLE>
</esi:inline>

関連項目

<esi:inline>の具体的な使用例は、「ポータル・サイトの実装の例」を参照してください。 


ESIのinvalidateタグ

<esi:invalidate>タグを使用すると、ブラウザ・ページのレスポンス内に無効化リクエストを構成できます。

構文

基本無効化の構文を次に示します。

<esi:invalidate [output="yes"]>
 <?xml version="1.0"?>
 <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
  <INVALIDATION VERSION="WCS-1.1">
    <SYSTEM>
     <SYSTEMINFO NAME="name" VALUE="value"/>
    </SYSTEM>
    <OBJECT>
      <BASICSELECTOR URI="URL"/>
      <ACTION REMOVALTTL="TTL"/>
      <INFO VALUE="value"/>
    </OBJECT>
 </INVALIDATION>
</esi:invalidate>

拡張無効化の構文を次に示します。

<esi:invalidate [output="yes"]>
 <?xml version="1.0"?>
 <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
 <INVALIDATION VERSION="WCS-1.1">
    <SYSTEM>
     <SYSTEMINFO NAME="name" VALUE="value"/>
    </SYSTEM>
       <OBJECT>
         <ADVANCEDSELECTOR URIPREFIX="prefix"
                           URIEXP="URL_expression"
                           HOST="host_name:port"
                           METHOD="HTTP_request_method"
                          BODYEXP="HTTP_body"/>
          <COOKIE NAME="cookie_name" VALUE="value"/>
          <HEADER NAME="HTTP_request_header" VALUE="value"/>
          <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY"
                 TYPE="SUBSTRING|REGEX"
                 VALUE="value"/>
         </ADVANCEDSELECTOR>
      <ACTION REMOVALTTL="TTL"/>
      <INFO VALUE="value"/>
      </OBJECT>
 </INVALIDATION>
</esi:invalidate>

属性

使用方法

関連項目

「HTTPレスポンスのインライン無効化」 

関連項目

「例: インライン無効化の使用」 


ESIのremoveタグ

<esi:remove>タグを使用すると、Surrogate-ControlヘッダーによってESI処理が使用可能になっていない場合、またはESIを使用可能なキャッシュが存在しない場合に、ESI以外のマークアップによる出力を指定できます。

構文

<esi:remove> HTML output...</esi:remove>

使用方法

このタグには、他の<esi:remove>タグ以外のあらゆるHTMLまたはESI要素を含めることが可能です。ネストされたESIタグは処理されないため、注意してください。

次のESIマークアップでは、<esi:include>コンテンツを挿入できない場合、http://www.company.comを挿入します。

<esi:include src="http://www.company.com/ad.html"/>
<esi:remove>
  <A HREF="http://www.company.com">www.company.com</A>
</esi:remove>

通常、OracleAS Web Cacheによってこの例のブロックが処理される際、ad.htmlファイルをフェッチしてテンプレート・ページに挿入し、<esi:remove>タグとそのコンテンツが削除されます。ESI処理が使用不可の場合、すべての要素がブラウザに渡され、ブラウザによりESIマークアップが無視されます。ただし、ブラウザにより、<A HREF=...>HTMLリンクが表示されます。


ESIのtry | attempt | exceptタグ

<esi:try>タグは例外処理に使用します。<esi:try>タグには、<esi:attempt>タグが1回と<esi:except>タグが1回以上含まれている必要があります。

関連項目

altおよびonerrorの使用時の注意事項は、「例外およびエラー」を参照してください。 

構文

次の形式では、サポートされる<esi:except>タグは1つのみです。

<esi:try>
  <esi:attempt>
    Try this...
  </esi:attempt>
  <esi:except>
    If the attempt fails, then perform this action...
  </esi:except>
</esi:try>

次の形式では、異なるタイプを持つ複数の<esi:except>タグがサポートされています。

<esi:try>
  <esi:attempt>
    Try this...
  </esi:attempt>
  <esi:except [type="type"]>
    If the attempt fails, then perform this action...
  </esi:except>
  <esi:except [type="type"]>
    Perform this action...
  </esi:except>
  <esi:except>
    If the attempt fails, then perform this action...
  </esi:except>
</esi:try>

使用方法

OracleAS Web Cacheにより、最初に<esi:attempt>のコンテンツが処理されます。<esi:attempt>に失敗すると、エラーがトリガーされ、OracleAS Web Cacheによって<esi:except>タグのコンテンツが処理されます。

一般的なエラーに対しては、<esi:except>タグをタイプなしで指定します。特定のエラーに対しては、<esi:except>タグをタイプ付きで指定します。<esi:except>タグは、次のタイプを受け入れます(大/小文字の区別はありません)。

次のESIマークアップでは、広告のフェッチを試みています。広告を挿入できない場合、OracleAS Web Cacheにより、かわりに静的リンクが挿入されます。

<esi:try>
  <esi:attempt>
    <esi:comment text="Include an ad"/>
    <esi:include src="http://www.company.com/ad1.htm"/>
  </esi:attempt>
  <esi:except>
    <esi:comment text="Just write some HTML instead"/>
    <a href=www.company.com>www.company.com</a>
  </esi:except>
</esi:try>

次のESIマークアップでは、フラグメントのフェッチを試みています。フラグメントがhttpclienterrorのために挿入できない場合、OracleAS Web Cacheでは、/cgi-bin/esi-fetch?/esi/tryNestL1.htmlをかわりに挿入します。

<esi:try>
  <esi:attempt>
    <esi:include src="/frag.html"/>
  </esi:attempt>
  <esi:except type="httpclienterror">
    <esi:include src="/cgi-bin/esi-fetch?/esi/tryNestL1.html"/>
  </esi:except>
</esi:try>

次の<esi:try>では、複数のHTTPリクエスト・ヘッダーを含むフラグメントhttp://server.portal.com/pls/ppcdemo/!PCDEMO.wwpro_app_provider.execute_portlet/513104940/26の挿入を試みています。様々なtypeエラーが原因でフラグメントを挿入できない場合、OracleAS Web Cacheでは、Unknown ESI Exceptionエラーを返します。

<esi:try>
  <esi:attempt>
    <esi:include src="http://server.portal.com/pls/ppcdemo/!PCDEMO.wwpro_app_
provider.execute_portlet/513104940/26" timeout="15000" >
      <esi:request_header name="X-Oracle-Device.MaxDocSize" value="0"/>
      <esi:request_header name="Accept"
      value="text/html,text/xml,text/vnd.oracle.mobilexml"/>
      <esi:request_header name="User-Agent"
        value="Mozilla/4.0 (compatible; MSIE 5.5; Windows; YComp 5.0.0.0)
        RPT-HTTPClient/0.3-3"/>
      <esi:request_header name="Device.Orientation" value="landscape"/>
      <esi:request_header name="Device.Class" value="pcbrowser"/>
      <esi:request_header name="PORTAL-SUBSCRIBER" value="us"/>
      <esi:request_header name="Device.Secure" value="false"/>
      <esi:request_header name="PORTAL-SUBSCRIBER-DN"
         value="dc=us,dc=oracle,dc=com"/>
      <esi:request_header name="PORTAL-SUBSCRIBER-GUID"
         value="A5EE385440E6252BE0340800208A8B00"/>
      <esi:request_header name="Accept-Language" value="en-us"/>
      <esi:request_header name="PORTAL-USER-DN"
         value="cn=public,cn=users,dc=us,dc=oracle,dc=com"/>
      <esi:request_header name="PORTAL-USER-GUID"
         value="A5EE55B396E22651E0340800208A8B00"/>
      <esi:request_header name="Content-Type"
         value="application/x-www-form-urlencoded"/>
    </esi:include>
  </esi:attempt>
  <esi:except type="incompatiblefragmentversion" >
     This happens when a fragment's processing requirement is not supported
     or not compatible with the template.
  </esi:except>
  <esi:except type="noconnection" >
     The cache is unable to connect to the origin server serving this fragment.
  </esi:except>
  <esi:except type="nestingtoodeep" >
     The fragment include depth has exceeded the maximum include depth. The
     default value defined in Web Cache is 3.
  </esi:except>
  <esi:except type="httpservererror" >
     The origin server returns an HTTP 5xx status code, a server error.
  </esi:except>
  <esi:except type="httpclienterror" >
     The origin server returns an HTTP 4xx status code, a client error, such as
     a malformed HTTP request or an unauthorized access.
  </esi:except>
  <esi:except type="incorrectresponseheader" >
     This happens when the response headers for a fragment cause the error.
  </esi:except>
  <esi:except type="incorrectxmlfragment" >
     This happens when there is any kind of error in OracleAS Web Cache XSLT
     retrieval, parsing, or processing.
  </esi:except>
  <esi:except type="originserverbusy" >
     The origin server for this fragment is busy and cannot accept new requests
     now. This is caused by OracleAS Web Cache-to-origin server request queue
    limit.
  </esi:except>
  <esi:except type="networktimeout" >
     This is thrown by a fragment whose request to the origin server has timed
     out in the network connection.
  </esi:except>
  <esi:except type="incorrectesifragment" >
     An error is encountered when OracleAS Web Cache tries to parse or process
     the ESI fragment response body due to errors in the body.
  </esi:except>
  <esi:except>
     Unknown ESI Exception
  </esi:except>
</esi:try>

ESIのvarsタグ

<esi:vars>タグを使用すると、ESIタグの外部で変数を使用できます。たとえば、<esi:include>または<esi:choose>ブロック内で変数を指定するかわりに、<esi:vars>タグを使用して、HTMLコード内で変数を指定できます。

構文

<esi:vars>Optional HTML code $(VARIABLE_NAME{key}) Optional HTML code</esi:vars>

構文の使用方法

使用方法

関連項目

HTTPリクエスト変数およびカスタム変数の使用方法は、「変数式」および「ESIのenvironmentタグ」を参照してください。 

次のESIマークアップには、挿入されたURLの一部として、Cookie typeとその値が含まれます。

<esi:vars>
  <IMG SRC="http://www.example.com/$(HTTP_COOKIE{type})/hello.gif"/>
</esi:vars>

次のESI出力は、「ようこそ」ページへの<A HREF=...>リンクの一部としてlogindataを参照します。logindataは、カスタム環境変数を含むXMLファイルを参照します。また、この出力には、他の<A HREF=...>リンクの一部として、ユーザーのsessionIDおよびカテゴリtypeのCookie値も含まれます。

<esi:vars>
  <A HREF="welcome.jsp?name=$(logindata{name})">
  <A HREF="/shopping.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_
STRING{type})">
  <IMG SRC="/img/shopping.gif">
  </A>
  <A HREF="/news.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/news.gif">
  </A>
  <A HREF="/sports.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_
STRING{type})">
  <IMG SRC="/img/sports.gif">
  </A>
  <A HREF="/fun.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/fun.gif">
  </A>
  <A HREF="/about.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/about.gif">
  </A>
 </esi:vars>


ESIの<!--esi-->タグ

<!--esi...-->タグにより、ESIタグでマークアップされているHTMLが、ESIタグを処理せずにブラウザに表示されます。OracleAS Web Cacheで、このタグを使用したページが処理されると、開始の<!--esiおよび終了の-->要素が削除され、ページのコンテンツは処理されます。マークアップが処理できない場合、このタグにより、ESIマークアップがHTMLの最終出力に影響しないことを確実にします。

構文

<!--esi
 ESI elements
-->

使用方法

このタグには、他の<!--esi...-->タグ以外のあらゆるESIまたはHTML要素を含めることが可能です。

In the following ESI markup, the <!--esi and --> are removed in the final
output. The output displays the content generated by
<p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>, 
plus any surrounding text.

<!--esi
 <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>
-->

ESIマークアップが処理できない場合、<p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>がHTML出力に表示されます。


戻る 次へ
Oracle
Copyright © 2002, 2006 Oracle.

All Rights Reserved.
目次
目次
索引
索引