| Oracle Application Server Web Cache 管理者ガイド 10gリリース2(10.1.2) B15770-04 |
|
この章では、動的フラグメントを使用したコンテンツ・アセンブリに提供されているEdge Side Includes(ESI)タグについて説明します。
この章の項目は次のとおりです。
ESIはオラクル社が共同開発に参加したオープン仕様です。クライアントとオリジナル・サーバー間のサロゲートまたはプロキシとして配置され、動的コンテンツのキャッシュで動的ページを組み立てるための統一プログラミング・モデルの開発を目的としています。
ESIは、OracleAS Web Cacheによるフラグメントの動的コンテンツ・アセンブリを可能にするXMLに類似したマークアップ言語です。テンプレート・ページにESIマークアップ・タグを設定し、このタグによって動的HTMLフラグメントを取得および挿入します。フラグメント自体にESIマークアップを含めることも可能です。テンプレート・ページおよびHTMLフラグメントにキャッシュ・ルールを割り当てることができます。オリジナル・サーバーではなく、OracleAS Web Cacheでページ・アセンブリを実行可能にすることによって、キャッシュ・ヒット率が高くなり、パフォーマンスが向上します。
|
関連項目
|
次の項で、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"
|
関連項目
|
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.4": コンテンツ・アセンブリおよびページの部分的なキャッシュに使用するOracle独自の拡張ESIタグを処理します。"ORAESI/9.0.4"では、10g(9.0.4)以降のOracleAS Web Cacheで提供されるすべてのESIタグがサポートされます。
"ORAESI/9.0.2": コンテンツ・アセンブリおよびページの部分的なキャッシュに使用するOracle独自の拡張ESIタグを処理します。"ORAESI/9.0.2"では、リリース2(9.0.2および9.0.3)のOracleAS Web Cacheで提供されるすべてのESIタグがサポートされます。
"ESI/1.0": コンテンツ・アセンブリおよびページの部分的なキャッシュに使用する標準ESIタグを処理します。
"ESI-Inline/1.0": <esi:inline>タグを処理します。
"ESI-INV/1.0": <esi:invalidate>タグを処理します。
"webcache/1.0": <!-- WEBCACHETAG-->および<!-- WEBCACHEEND-->タグを使用してパーソナライズ属性を処理します。
"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"のみを指定する必要があります。
ESIの要素と属性はXML構文に準拠しますが、HTMLやXMLオブジェクトなど、他のオブジェクトに埋込み可能です。OracleAS Web Cacheによってページが処理される際、ESI要素自体は出力から削除されます。
ESI構文は、基本的にXML構文規則に準拠します。タグの使用の際には、次の点に注意してください。
通常は小文字です。
通常は大文字です。
=)の前後、および"<"と"esi:"の間には、空白を使用できません。次に、無効な構成を示します。
<esi:include src = "www.foo.com"/>
次に、正しい構成を示します。
<esi:include src="www.foo.com"/>
例16-1に示すように、ESIタグにはESI要素およびその他のHTMLマークアップをネストすることが可能です。
<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')
表16-2に、ESIでサポートされているHTTPリクエスト変数を示します。次のことに注意してください。
QUERY_STRINGを除き、変数の値は、HTTPリクエスト・ヘッダー・フィールドから取得されます。QUERY_STRINGの場合、値はHTTPリクエスト・ボディまたはURLから取得されます。
表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: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: ブール操作を指定します。
<esi:choose>タグには1つ以上の<esi:when>タグが必要で、オプションで1つの<esi:otherwise>タグを含めることが可能です。
<esi:when>タグが実行され、その後<esi:choose>タグが終了されます。trueと評価された<esi:when>タグが存在せず、<esi:otherwise>タグが存在する場合は、その要素のコンテンツが実行されます。
<esi:when>および<esi:otherwise>要素内に、他のHTMLまたはESI要素を含めることは可能です。
test属性では、trueまたはfalse論理の評価方法を決定するためにブール式を使用します。ESIでは、次のブール演算子をサポートしています。
ブール式の使用方法に関して、次の点に注意してください。
明示的に関連付けを示すには、式の一部をカッコで囲んでグループ化します。
'a'==3は'a'=='3'と評価され、3は文字列として評価されます。
&、!および|)は、式の修飾に使用しますが、比較には使用できません。
')を使用します。たとえば、次の文字列は有効です。
$(HTTP_COOKIE{name})=='typical'
¥')は使用できません。たとえば、次の例はサポートされていません。
$(HTTP_COOKIE{'user¥'s name'})=='typical'
ある数値をnullと比較すると、その数値は等しい文字列に変換され、空の文字列と比較されます。次のESIマークアップでは、$(logindata{name})は値nameへのアクセスを可能にする変数です。nameが空で、nullと評価された場合、式はtrueと評価されます。nameが空でなく、nullと評価されなかった場合、式はfalseと評価されます。
<esi:choose> <esi:when test="$(logindata{name}) == null"> <esi:include src=/login/$(logindata{name})"/> </esi:when> <esi:otherwise> <esi:include src=/login/guest.html"/> <esi:otherwise> </esi:choose>
次の式に、ブール演算子の正しい使用方法を示します。
!(1==1) !('a'<='c') (1==1)|('abc'=='def') (4!=5)&(4==5)
次の式に、ブール演算子の誤った使用方法を示します。
(1 & 4) ("abc" | "edf")
文は、<esi:when>または<esi:otherwise>サブタグ内に使用する必要があります。サブタグの外の文は、条件として評価されません。例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の指示に関するコメントを追加できます。
<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タグとともに使用できます。
このタグの書式は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>
src: 環境変数と値を取得するURLを指定します。 URLは、絶対URLでも、相対URLでも構いません。絶対URLを指定する場合は、次のいずれかの形式を使用します。
絶対URLにホスト名を指定する場合は、接頭辞としてhttp://またはhttps://を入力する必要があります。HTMLパーサーでは、次のURL内のhost:80は、ホスト名ではなく、フォルダ名として扱われます。
src="host:80/index.htm"
このURLを有効にするには、次のように指定します。
src="http://host:80/index.htm"
相対URLは、テンプレート・ページに対して相対的に解決されます。その結果、現在のテンプレートのESI環境が設定されます。
URLのソース・コードには、次のXML形式が必要です。
<?xml version="1.0"?> <esi:environment esiversion="ORAESI/9.0.4"> <variable_name>variable_value</variable_name> <variable_name>variable_value</variable_name> </esi:environment>
name: 環境変数の参照に使用する名前を指定します。
method: 環境フラグメントのHTTPリクエスト・メソッドを指定します。有効な値はGETまたはPOSTです。
max-age: XMLファイルが期限切れになるまでの時間(秒)を指定します。オプションとして、期限切れになってからXMLファイルが削除されるまでの時間(秒)を指定します。
timeout: フラグメントをフェッチするまでの時間(秒)を指定します。フラグメントが指定時間内にフェッチされなかった場合、フェッチは中断されます。
onerror: srcオブジェクトの取得が失敗した場合、ESIタグを無視してページを表示するよう指定します。
request_body: フラグメントのHTTPリクエスト・ボディを指定します。
request_header: 使用するOracleAS Web CacheのHTTPリクエスト・ヘッダー・フィールドおよび値を指定します。
log: x-esi-infoログ・フィールドが設定されている場合は、access_log_file.fragmentファイルに挿入するフラグメントのログ・メッセージを指定します。フラグメントとそのフラグメントを生成したアプリケーションを識別する説明的なテキスト文字列を指定できます。説明的なテキストを指定することによって、ログ・ファイル内のフラグメントを簡単に識別でき、フラグメントがリクエストされる頻度を判断できます。 <esi:environment>タグを指定してから、他のESIタグを指定します。
request_body要素を指定しないでください。
request_header要素は0(ゼロ)かそれ以上です。複数のHTTPリクエスト・ヘッダー・フィールドを指定するには、複数のrequest_header要素を使用します。
<esi:environment src="environment_URL" [max-age="expiration_time[+removal_time]"][method="GET|POST"] [onerror="continue"] [timeout="fetch_time"]> <esi:request_header name="request_header" value="value"/> <esi:request_header name="request_header" value="value"/> </esi:environment>
request_header要素が指定されていない場合、OracleAS Web Cacheでは親ページから他のリクエスト・ヘッダーを使用します。
log要素を指定しないでください。
関連項目
max-age、method、onerror、request_bodyおよびrequest_headerの使用時の注意事項は、「ESIのincludeタグ」を参照してください。
onerrorの使用時の注意事項は、「例外およびエラー」を参照してください。
次の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.txtとesi-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>タグにより、フラグメントの挿入に使用する構文が提供されます。
このタグの書式は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>
src: フェッチするフラグメントのURLを指定します。URLは、リテラル文字列でも変数が含まれていても構いません。 URLは、絶対URLでも、相対URLでも構いません。絶対URLを指定する場合は、次のいずれかの形式を使用します。
絶対URLにホスト名を指定する場合は、接頭辞としてhttp://またはhttps://を入力する必要があります。HTMLパーサーでは、次のURL内のhost:80は、ホスト名ではなく、フォルダ名として扱われます。
src="host:80/index.htm"
このURLを有効にするには、次のように指定します。
src="http://host:80/index.htm"
相対URLは、テンプレート・ページに対して相対的に解決されます。マークアップ内の要素は挿入された結果に置換されてブラウザに送信されます。
XMLファイルのフラグメントが有効なXMLである場合は、XMLフラグメントを指定できます。次の例では、OracleAS Web CacheでXSL Transformation(XSLT)を使用して、スタイルシートによってXMLをHTMLに変換するように指定しています。スタイルシートは、XMLフォーマットをHTMLフォーマットにマップします。
<?xml version="1.0"?> <?xml-stylesheet type="text/xml" href="stylesheet.xsl"?>
XMLフラグメントとXSLスタイルシート両方のレスポンス・ページが、テキストとXMLのメディア・タイプを含むContent-Typeレスポンス・ヘッダー・フィールドで構成されていることを確認してください。次に例を示します。
Content-Type: text/xml
alt: srcが見つからない場合に代替リソースを指定します。値の要件は、srcの要件と同じです。
max-age: フラグメントが期限切れになるまでの時間(秒)を指定します。オプションとして、期限切れになってからフラグメントが削除されるまでの時間(秒)を指定します。テンプレート・ページの失効フラグメントに対する許容値が、フラグメント・レスポンスのTTLパラメータによって指定された値よりも大きい場合、この属性を使用します。
method: フラグメントのHTTPリクエスト・メソッドを指定します。有効な値はGETまたはPOSTです。
onerror: srcオブジェクトの取得が失敗した場合、ESIタグを無視してページを表示するよう指定します。
redirect: srcフラグメントが一時的に異なるURLにある場合に、そのフラグメントの表示方法を指定します。yesを指定すると、そのURLがリダイレクトされ、表示されます。noを指定すると、そのフラグメントのURLはリダイレクトされず、HTTP 302 Foundステータス・コードがフラグメントのかわりに表示されます。デフォルトはyesです。
timeout: フラグメントをフェッチするまでの時間(秒)を指定します。フラグメントが指定時間内にフェッチされなかった場合、フェッチは中断されます。 request_body: フラグメントのHTTPリクエスト・ボディを指定します。
request_header: 使用するOracleAS Web CacheのHTTPリクエスト・ヘッダー・フィールドおよび値を指定します。複数のHTTPリクエスト・ヘッダーを指定できます。この属性を指定すると、親フラグメントまたはテンプレート・ページからのリクエスト・ヘッダーはすべて無視されます。
log: x-esi-infoログ・フィールドが設定されている場合は、access_log.fragmentファイルに挿入するフラグメントのログ・メッセージを指定します。フラグメントとそのフラグメントを生成したアプリケーションを識別する説明的なテキスト文字列を指定できます。説明的なテキストを指定することによって、ログ・ファイル内のフラグメントを簡単に識別でき、フラグメントがリクエストされる頻度を判断できます。 <esi:include>では、3レベル以下のネストをサポートしています。
<esi:include>では、二重引用符のエスケープ(¥")をサポートしていません。たとえば、次の例はサポートされていません。
<esi:include src="file¥"user.htm"/>
src属性は、HTTPとHTTPSの両方をサポートしています。OracleAS Web Cacheでは、テンプレートとフラグメントに異なるプロトコルの使用を許可しています。次のことに注意してください。
src属性で、src="/PersonalizedGreeting"のようにフラグメントの相対パスが指定されている場合は、テンプレートのプロトコルが使用されます。
src属性で使用されているプロトコルが、OracleAS Web Cache Managerの「Site-to-Server Mapping」ページ(「Origin Servers, Sites, and Load Balancing」→「Site-to-Server Mapping」)で指定されたプロトコルと一致しない場合、OracleAS Web Cacheは、「Site-to-Server Mapping」ページでオリジナル・サーバーのために構成されたプロトコルを使用します。さらに、OracleAS Web Cacheは、次の警告メッセージをイベント・ログに記録します。
[Date] [warning 11250] [ecid: request_id, serial_number]
ESI include fragment protocol does not match origin server protocol:
Origin Server Protocol=protocol URL=URL
たとえば、テンプレート・ページで<esi:include src="https://www.company.com:80/gifs/frag1.gif"/>と構成されており、サイトからサーバーへのマッピングでHTTPがオリジナル・サーバーに指定されている場合には、http://www.company.com:80/gifs/frag1.gifが使用され、次のメッセージがイベント・ログに記録されます。
[03/Feb/2005:23:16:46 +0000] [warning 11250] [ecid: 90125204378,0] ESI include fragment protocol does not match origin server protocol: Origin Server Protocol=http URL=https://www.company.com:80/gifs/frag1.gif
request_body要素を指定しないでください。
request_header要素は0(ゼロ)かそれ以上です。
request_header要素を使用します。
<esi:include src="URL_fragment" [max-age="expiration_time[+removal_time]"] [method="GET|POST"] [onerror="continue"] [timeout="fetch_time"]> <esi:request_header name="request_header" value="value"/> <esi:request_header name="request_header" value="value"/> </esi:include>
log要素を指定しないでください。
<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マークアップには、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:inline>タグは、フラグメントを他のオブジェクトのHTTPレスポンスに埋め込まれた、別のキャッシュ可能なフラグメントとしてマークします。OracleAS Web Cacheでは、これらのフラグメントを独立した<esi:include>フラグメントとして格納しアセンブルします。
<esi:inline name="URL" fetchable="yes|no" [max-age="expiration_time[+removal_time]"] [timeout="fetch_time"] Embedded HTML code </esi:inline>
name: フラグメントに一意の名前をURL形式で指定します。
fetchable: yesの場合、フラグメントの期限が切れると、OracleAS Web Cacheはフラグメントをオリジナル・サーバーからフェッチします。このフェッチ・プロセスには、フラグメント用のテンプレートは含まれません。noの場合、OracleAS Web Cacheはキャッシュ・ミスがあったときにテンプレート全体をオリジナル・サーバーからフェッチし、テンプレートからすべてのフラグメントを抽出しようとします。
max-age: フラグメントが期限切れになるまでの時間(秒)を指定します。オプションとして、期限切れになってからフラグメントが削除されるまでの時間(秒)を指定します。テンプレート・ページの失効フラグメントに対する許容値が、フラグメント・レスポンスのTTLパラメータによって指定された値よりも大きい場合、この属性を使用します。
timeout: フラグメントをフェッチするまでの時間(秒)を指定します。フラグメントが指定時間内にフェッチされなかった場合、フェッチは中断されます。
一部の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: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>
output: yesを指定すると、無効化の結果は、コメント<!--result-->で囲まれてブラウザ・レスポンスに含まれます。noを指定すると、無効化の結果は、出力に表示されません。テスト環境では、yesの値を指定します。本番環境では、noの値を指定します。
<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>タグは例外処理に使用します。<esi:try>タグには、<esi:attempt>タグが1回と<esi:except>タグが1回以上含まれている必要があります。
次の形式では、サポートされる<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>タグは、次のタイプを受け入れます(大/小文字の区別はありません)。
nestingtoodeep: フラグメントのインクルード深さが最大インクルード深さを超えた場合に発生するエラー。
originserverbusy: そのフラグメントのオリジナル・サーバーがビジー状態で、新規リクエストを受け入れることができないために発生するエラー。このエラーが発生するのは、OracleAS Web Cacheからオリジナル・サーバーへのリクエストのキューが限界に達したときです。
noconnection: キャッシュがそのフラグメントを処理するオリジナル・サーバーに接続できないために発生するエラー。
networktimeout: オリジナル・サーバーへのフラグメント・リクエストがネットワーク接続中にタイムアウトしたために発生するエラー。
httpclienterror: オリジナル・サーバーが、HTTP 4xxステータス・コードを返すために発生するエラー(不正なHTTPリクエストや権限のないアクセスなどのクライアント・エラー)。
httpservererror: オリジナル・サーバーがHTTP 5xxステータス・コードを返すために発生するエラー(サーバー・エラー)。
incompatiblefragmentversion: フラグメントの処理要件がサポートされていないか、テンプレートと互換性がないために発生するエラー。ESIフラグメントの<!-- WEBCACHETAG-->および<!-- WEBCACHEEND-->の処理は、ESI処理と互換性がありません。フラグメントがキャッシュ内のどの処理も不要なプレーン・データの可能性があります。あるいは、このリリースでサポートされているESI機能の処理が必要なESIテンプレート自体の可能性もあります。使用されているESI機能は、Surrogate-Control content制御ディレクティブで指定されています。
incorrectresponseheader: フラグメントのレスポンス・ヘッダーが原因で発生するエラー。
incorrectesifragment: OracleAS Web CacheでESIフラグメント・レスポンスのボディのエラーを解析または処理しようとしたときに発生するエラー。
incorrectxmlfragment: OracleAS Web CacheによるXSLTの取得、解析または処理にエラーがあった場合に発生するエラー。
次の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タグの外部で変数を使用できます。たとえば、<esi:include>または<esi:choose>ブロック内で変数を指定するかわりに、<esi:vars>タグを使用して、HTMLコード内で変数を指定できます。
<esi:vars>Optional HTML code$(VARIABLE_NAME{key})Optional HTML code</esi:vars>
$(VARIABLE_NAME{key})形式が使用されていない場合、OracleAS Web Cacheでは、次のエラー・メッセージがイベント・ログに記録されます。
[Date] [error 12086][ecid: request_id, serial_number] ESI syntax error. Unrecognized keywordkeywordis at lineline.
<esi:vars>タグは、HTMLコードの行内でネストしないでください。次に誤った構文の例を示します。
HTML code<esi:vars>$(VARIABLE_NAME{key})</esi:vars>HTML code
たとえば、次の例は無効です。
<IMG SRC="http://www.example.com/<esi:vars>$(HTTP_ COOKIE{type})</esi:vars>/hello.gif"/>
次の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タグでマークアップされている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出力に表示されます。
|
![]() Copyright © 2002, 2006 Oracle. All Rights Reserved. |
|