Oracle Application Server Web Cache 管理者ガイド 10gリリース2(10.1.2) B15770-04 |
|
この章では、キャッシュ・ルールの構成方法について説明します。
この章の項目は次のとおりです。
キャッシュ・ルールにより、静的オブジェクト、複数バージョンのオブジェクト、パーソナライズ・ページ、セッションCookie、埋込みURLパラメータまたはPOSTボディ・パラメータをサポートするページ、および動的ページのコンテンツをキャッシュするかどうかを選択できます。
Oracle Enterprise Manager 10g Application Server ControlコンソールまたはOracleAS Web Cache Managerを使用して、URLに基づいたキャッシュ属性を指定することでキャッシュ・ルールを構成するか、またはSurrogate-Control
レスポンス・ヘッダー・フィールド内の特定のオブジェクトに対してキャッシュ属性を構成します。クライアントによってそのURL内のオブジェクトがリクエストされるまで、それらのオブジェクトはキャッシュに格納されません。OracleAS Web Cacheは、オブジェクトが初めてリクエストされたとき、Surrogate-Capability
リクエスト・ヘッダー・フィールドをオブジェクトに追加します。Surrogate-Capability
リクエスト・ヘッダー・フィールドは、オブジェクトがキャッシュを通過してきたことを示します。
OracleAS Web Cacheでは、次の優先順位を使用して、オブジェクトがキャッシュ可能かどうかを決めます。
Surrogate-Control
レスポンス・ヘッダー
これらのヘッダーのいずれかが存在する場合、OracleAS Web Cacheでは、オブジェクトがキャッシュされません。
Cookie
リクエスト・ヘッダーおよびSet-Cookie
リクエスト・ヘッダーのCookie値
Cache-Control
レスポンス・ヘッダー
Expires
レスポンス・ヘッダー
Surrogate-Control
レスポンス・ヘッダー・フィールドを使用すると、Application Server ControlコンソールまたはOracleAS Web Cache Managerによって構成されたキャッシュ・ルールをオリジナル・サーバー側でオーバーライドできます。同じオブジェクトに対して、Surrogate-Control
レスポンス・ヘッダーとキャッシュ・ルールの両方がある場合、OracleAS Web Cacheはこの2つをマージします。たとえば、キャッシュ不可のオブジェクトに対してApplication Server ControlコンソールまたはOracleAS Web Cache Managerで圧縮が使用可能に設定されているキャッシュ・ルールがあり、レスポンス・ヘッダーにSurrogate-Control: max-age=30+60
という記述が含まれている場合、OracleAS Web Cacheは両方の設定を考慮します。OracleAS Web Cacheは、オブジェクトのキャッシュにSurrogate-Control
レスポンス・ヘッダーのmax-age
制御ディレクティブを使用し、キャッシュ・ルールから圧縮の設定を使用します。Surrogate-Control
レスポンス・ヘッダーとキャッシュ・ルールの内容が競合する場合、OracleAS Web CacheはSurrogate-Control
レスポンス・ヘッダーの設定を使用します。
キャッシュ・ルールまたはSurrogate-Control
レスポンス・ヘッダーが指定されていない場合、OracleAS Web CacheはHTTPプロキシ・キャッシュと同じように動作します。つまり、HTTPヘッダー情報でキャッシュするページを決定します。通常、HTTPプロキシ・キャッシュには、静的コンテンツを持つページのみ格納されます。
キャッシュ・ルールを作成するには、次の項目を指定します。
OracleAS Web Cacheはクライアント・リクエストを受信すると、セレクタを使用してキャッシュ・ルールをフィルタ処理し、リクエストに対して適切なルールを探します。キャッシュ・ルールを作成するとき、次のセレクタを指定します。
表現タイプは、次のうちのいずれかです。
表現タイプに基づいてURLを指定します。
オブジェクトのHTTPリクエスト・メソッドとして、「GET
」、「GET
with query string」(問合せ文字列が含まれるGET)、または「POST
」を指定します。
POST
ボディ・パラメータ埋込みURLパラメータ、または埋込みPOST
ボディ・パラメータを指定します。
POST
ボディ表現HTTPリクエスト・メソッドにPOST
を選択した場合は、正規表現構文でHTTP POST
ボディを指定します。
ファイル拡張子によって、gif
などの共有ファイル拡張子タイプを指定します。ファイル拡張子を指定するには、拡張子を入力します。OracleAS Web Cacheでは、内部的にファイル拡張子にピリオド(.
)が付くため、ピリオドを入力する必要はありません。たとえば、gif
と.gif
は両方とも有効な入力です。
パス接頭辞によって、ディレクトリ構造内を横断してオブジェクトを探します。OracleAS Web Cacheでは、内部的にパスにhttp://
host_name:
port
/
または"/
"が付くため、この情報を入力する必要はありません。
接頭辞は、正規表現の予約語を含め、文字どおり解釈されます。予約語には、ピリオド(.
)、疑問符(?
)、アスタリスク(*
)、大カッコ([]
)、中カッコ({}
)、カレット(^
)、ドル記号($
)および円記号(¥
)が含まれます。
たとえば、パス接頭辞http://www.company.com/contacts
または/contacts
は、定義済サイトwww.company.com
のcontacts
ディレクトリ下にあるオブジェクトに一致します。
OracleAS Web Cacheでは、Netscape Proxy Server 2.5でサポートされている、URL用POSIX 1003拡張正規表現に基づく正規表現構文がサポートされています。
POSIX正規表現を使用する際、次の構文規則に注意してください。
^
)を、終わりを示すにはドル記号($
)を使用します。これらの文字が使用されていない場合、POSIXではサブストリングの一致だとみなされます。たとえば、^/a/b/.*¥.gif$
の場合、/a/b
またはそのサブディレクトリ内のGIFファイルに一致します。一方、/a/b/.*¥.gif
は、/x/y/a/b/c/d.gift
に一致します。
.
)を使用します。
?
)を使用します。
*
)を使用します。
¥
)を使用します。たとえば、ピリオド(¥.
)、疑問符(¥?
)またはアスタリスク(¥*
)などです。表12-1に、キャッシュするコンテンツと、そのコンテンツに対応するキャッシュ・ルールの正規表現構文の入力方法の例を示します。
キャッシュするコンテンツ | 正規表現構文 |
---|---|
|
|
|
|
|
|
キャッシュ・ポリシーは、オブジェクトをキャッシュするかどうかを指定します。キャッシュ・ポリシー「Cache」を指定すると、OracleAS Web Cacheはキャッシュ内のオブジェクトによってリクエストを処理します。キャッシュ・ポリシー「Don't Cache」を指定すると、OracleAS Web Cacheはリクエストをオリジナル・サーバーに転送し、コンテンツをキャッシュしません。
通常キャッシュを不可にするコンテンツの例は、更新トランザクション、ショッピング・カートの表示画面および個人アカウント情報の表示画面などです。OracleAS Web Cacheでキャッシュ・ルールを設定する最も簡単な方法の1つは、最初にキャッシュ不可のコンテンツを指定し、次に、キャッシュするコンテンツすべてに対応する広範囲のルールを使用します。または、最初にキャッシュするコンテンツを指定し、次にキャッシュ不可のコンテンツすべてに対応するルールを指定します。実際には、キャッシュ可と不可の場合のルールを混在して指定可能です。
キャッシュ・キー・ポリシーによって、OracleAS Web Cacheはリクエストをキャッシュ内の適切なオブジェクトにマップできます。OracleAS Web Cacheは、セレクタとキャッシュ・ポリシーを使用してリクエストをフィルタ処理した後、キャッシュ・キー・ポリシーを使用してキャッシュ内で正しいオブジェクトを探します。
OracleAS Web Cacheでは、次の中の指定された属性を使用してキャッシュ・キーが構成されます。
これらの属性によって、キャッシュされるオブジェクトの一意のIDが作成されます。OracleAS Web CacheはこのIDを使用してリクエストを参照します。
キャッシュ・ルールの優先順位を指定します。優先順位の高いルールが先に一致判定されます。
キャッシュ可能と不可のオブジェクトにキャッシュ・ルールの順序を指定する場合は、キャッシュ不可のオブジェクトの優先順位をキャッシュ可能のオブジェクトより高くします。たとえば、/cec/cstage?ecaction=ecpassthru2
以外の/cec/cstage?ecaction=ecpassthru
が含まれているURLをすべてキャッシュする場合は、表12-2に示す順序で、正規表現またはパス接頭辞の構文を使用してルールを入力します。
順序を逆にすると、/cec/cstage?ecaction=ecpassthru2
を含め、/cec/cstage?ecaction=ecpassthru
で始まるすべてのオブジェクトがキャッシュされます。
表12-3に示すルールでは、ルール2によってGET
メソッドおよび問合せ文字列が含まれるGET
メソッドを使用するURLのオブジェクトがキャッシュされ、ルール3によってPOST
メソッドを使用しPOST
のボディがaction=search
に一致するURLのオブジェクトがキャッシュされます。
OracleAS Web Cacheをインストールすると、サイト別キャッシュ・ルールおよびグローバル・キャッシュ・ルールが、構成されたデフォルトのサイトに対して設定されます。
図12-1は、Application Server Controlコンソールの「ルール」ページ(Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「ルール」)を示します。また、図12-2は、OracleAS Web Cache Managerの「Caching, Personalization, and Compression Rules」ページ(「Rules for Caching, Personalization, and Compression」→「Caching, Personalization, and Compression Rules」)を示します。
表12-4に、デフォルトのキャッシュ・ルールの説明を示します。ルール1はOracle Application Server Wireless用です。Oracle Application Serverのこのコンポーネントを使用しない場合、このルールは削除できます。
この項では、キャッシュ・ルールを構成し、そのルールを複数のURLに関連付ける方法を説明します。次の項目が含まれます。
Application Server Controlコンソールでキャッシュ・ルールを作成するには、Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「ルール」にナビゲートします。
OracleAS Web Cache Managerでキャッシュ・ルールを作成する手順は、次のとおりです。
「Caching, Personalization, and Compression Rules」ページが表示されます。
「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスが表示されます。
.gif
など特定のファイル拡張子で終わるオブジェクトにキャッシュ・ルールを適用します。
.
)が付くため、ピリオドを入力する必要はありません。
http://
host_name
:
port
/
または"/
"が付くため、この情報を入力する必要はありません。 接頭辞は、正規表現の予約語を含め、文字どおり解釈されます。予約語には、ピリオド(.
)、疑問符(?
)、アスタリスク(*
)、大カッコ([]
)、中カッコ({}
)、カレット(^
)、ドル記号($
)および円記号(¥
)が含まれます。
^
」、およびURLの終わりを示す場合は「$
」を使用することを忘れないでください。関連項目: キャッシュ・ルールの構文については、「セレクタ」を参照してください。
GET
」、「GET
with
query
string
」(問合せ文字列が含まれるGET)、または「POST
」HTTPリクエスト・メソッドを選択し、キャッシュするオブジェクトのメソッドを選択します。複数のリクエスト・メソッドを選択可能です。
POST
ボディ・パラメータとその値を、対応する「Name」フィールドと「Value」フィールド(オプション)に入力します。次に、「Add」をクリックします。正規表現の表現タイプの場合は、「URL Expression」フィールドに埋込みURLパラメータを入力してアルファベット順に並べ替える必要があります。
クライアントのブラウザからOracleAS Web Cacheに送信されるリクエストURLと、OracleAS Web Cacheでそのリクエストの処理に使用される内部URL表現は異なります。OracleAS Web Cacheでページ・リクエストが処理されるとき、そのURLの埋込みURLパラメータはアルファベット順に並べ替えられます。一方、キャッシュ・ルールは、埋込みURLパラメータが並べ替えられたURLの内部表現に対してのみ一致します。キャッシュ・ルールを正しく一致させるには、「URL and POST Body Parameters」セクションを使用するか、埋込みURLパラメータを正規表現構文でアルファベット順に手動で入力します。「URL and POST Body Parameters」セクションを使用する場合、埋込みURLパラメータは自動的に並べ替えられます。
たとえば、次のようなURLがあるとします。
http://my.oracle.com/servlet/page?_pageid=53&_dad=moc&_schema=MOC
「URL Expression」フィールドに、埋込みURLパラメータの正規表現を手動で並べ替えずに^/servlet/page¥?_pageid=53&_dad=moc&_schema=MOC$
と入力した場合、キャッシュ・ルールは、OracleAS Web Cacheで使用されるURLの内部表現に一致しません。一致させるには、「URL Expression」フィールドに、次のように正規表現を入力する必要があります。
^/servlet/page¥?_dad=moc&_pageid=53&_schema=MOC$
POST
ボディ・パラメータを指定しなかった場合は、「POST Body Expression」フィールドでHTTP POST
ボディを指定します。このルールをすべてのPOST
リクエスト・ボディに適用する場合、「.*
」をフィールドに入力します。
圧縮が有効な場合でも、次のものはOracleAS Web Cacheによって圧縮されません。
Content-Encoding
レスポンス・ヘッダー・フィールドが含まれるレスポンス。
Content-Disposition
レスポンス・ヘッダー・フィールドが含まれるレスポンス。Content-Disposition
レスポンス・ヘッダー・フィールドを持つレスポンスが圧縮されている場合は、間違ったファイル名が表示されます。
圧縮されたJavaScriptファイルによって一部のブラウザが不安定になり、障害が発生することもあります。この問題は、script
タグのsrc
属性を使用して参照されているファイルにのみ影響を及ぼし、インラインでJavaScriptを含んでいるファイルは影響を受けません。
OracleAS Web Cacheでは、Netscape 4.xおよびInternet Explorer 5.5ブラウザの場合、JavaScriptファイルは圧縮されません。その他のブラウザでは、圧縮が有効な場合、ファイルが圧縮されます。
.css
)(一部のブラウザ)。OracleAS Web Cacheでは、Netscape 4.xおよびInternet Explorer 5.5ブラウザの場合、カスケード・スタイル・シートは圧縮されません。これらのブラウザでは、カスケード・スタイル・シートが圧縮されている場合、背景イメージなどの背景属性が出力に表示されないことがあります。
すでにWinZipやGZIPなどの圧縮ユーティリティで圧縮済の実行ファイルやその他のファイルは圧縮しないことをお薦めします。これらのファイルを圧縮しても、圧縮の利点は得られず、オーバーヘッドが増加します。
テスト・システムのキャッシュ・ルールの選択は解除することをお薦めします。
表12-5 「Cache Policy」で「Cache」を選択した場合のルールのオプション
オプション | 説明 |
---|---|
Expiration Policy |
リストから、オブジェクトに適用する期限切れポリシーを選択します。オブジェクトに適した期限切れポリシーが存在しない場合は、ナビゲータ・フレームで「Rules for Caching, Personalization, and Compression」→「Expiration Policy Definitions」を選択し、新しいポリシーを作成します。 関連項目:
|
Multiple Objects with the Same Selector by Cookies |
カテゴリCookieの値に依存する1つのオブジェクトの複数バージョンをキャッシュするには、必要なCookieを選択します。これらのオブジェクトに適用できるCookieが存在しない場合は、ナビゲータ・フレームで「Rules for Caching, Personalization, and Compression」→「Cookie Definitions」を選択し、新しいCookie定義を作成します。 関連項目:
|
Multiple Objects with the Same Selector by Other Headers |
HTTPリクエスト・ヘッダーの値に依存する1つのオブジェクトの複数のバージョンをキャッシュするには、次の中からどれか1つ以上を選択します。
次に、Netscape 4.6ブラウザでHTTPリクエスト・ヘッダーを使用して作成されたリクエストの例を示します。 User-Agent: Mozilla/4.61 [en] (WinNT; U)
注意: OracleAS Web Cacheでは、これらのHTTPリクエスト・ヘッダーの値を解析しません。2つのページの値が異なる場合、OracleAS Web Cacheによりそれらのページは別々にキャッシュされます。この問題は、 関連項目: 概要は、「1つのオブジェクトの複数のバージョン」を参照してください。 |
Session Caching Policies |
Cookie、埋込みURLパラメータまたは 関連項目:
|
Session-Encoded URL |
セッション・エンコードされたURLで使用されるセッション値、またはHTMLタグ
セッション値またはパーソナライズ属性値を置き換える場合は、「Yes」を選択します。OracleAS Web Cacheでは、Cookie、埋込みURLパラメータまたは 関連項目:
|
Avoid Unwanted Copies |
OracleAS Web Cacheが値を無視する追加の埋込みURLまたは
埋込みURLパラメータまたは 関連項目:
|
HTTP Error Caching |
ルールに対して、OracleAS Web Cacheでキャッシュおよび表示するHTTPエラー・コードを入力します。複数のコードを入力する場合は、カンマで区切ります。
オリジナル・サーバーで問題が発生し、このルールに対するHTTPレスポンスのステータスが OracleAS Web Cacheは、ルールの期限切れポリシーに従ってエラー・ページをキャッシュします。 関連項目: 第13章「無効化リクエストの送信」 |
アプリケーション開発者は、Application Server ControlコンソールまたはOracleAS Web Cache Managerで設定するキャッシュ・ルールに加え、またはその代替として、多くのキャッシュ属性をHTTPレスポンス・メッセージのヘッダーに格納することも可能です。詳細は、「Surrogate-Controlレスポンス・ヘッダーをキャッシュ・ルールの代替として使用」を参照してください。
ヒント
キャッシュ・ルールを構成した後は、優先順位を決定します。最初に一致したルールのみが適用されます。
ルールに優先順位を割り当てるには、次の手順を実行します。
OracleAS Web Cache Managerでは、次のキャッシュ・ポリシー機能にルールのグループを関連付けることができます。
複数のルールを1つのキャッシュ・ポリシー機能に関連付けるには、次の手順を実行します。
キャッシュ・ポリシー機能の「Association」ページが表示されます。
キャッシュ・ポリシー機能の「Change Association」ダイアログ・ボックスが表示されます。
必要なキャッシュ・ルールが存在しない場合は、「キャッシュ・ルールの構成とルールの関連付け」の説明に従ってキャッシュ・ルールを作成します。
この項には、各キャッシュ・ポリシー機能の構成に関する次の項目が含まれます。
キャッシュ内のオブジェクトをいつ期限切れにするかを指定するポリシーを作成できます。さらに、オブジェクトが期限切れになった後に、キャッシュ内に存続する期間を指定することも可能です。オブジェクトが期限切れになると、すぐに削除処理が行われるか、または、オリジナル・サーバーの容量によって許可される最終的な期限切れ時に削除処理が行われます。
Application Server Controlコンソールで期限切れポリシーを構成するには、Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「ルール」→「有効期限ポリシー」にナビゲートします。
OracleAS Web Cache Managerで有効期限ポリシーを作成する手順は、次のとおりです。
「Expiration Policy Definitions」ページが表示されます。
「Create Expiration Policy」ダイアログ・ボックスが表示されます。
Expires
レスポンス・ヘッダー・フィールドに従う場合は、このオプションを選択します。これはデフォルトです。このオプションを使用するには、オブジェクトでHTTPのExpires
またはCache-Control
レスポンス・ヘッダー・フィールドを使用している必要があります。
最初の2つのオプションは、OracleAS Web Cache固有のルールで期限を設定しますが、3つ目のオプションでは、HTTPのExpires
またはCache-Control
レスポンス・ヘッダー・フィールドを使用してオブジェクトに設定されている期限切れポリシーを認識します。
「Expiration Policy Association」ページが表示されます。
「Change Expiration Association」ダイアログ・ボックスが表示されます。
キャッシュ・ルールが左のリストに移動し、ダイアログ・ボックスが閉じます。
必要なキャッシュ・ルールが存在しない場合は、「キャッシュ・ルールの構成とルールの関連付け」の説明に従ってキャッシュ・ルールを作成します。ステップ13で、「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスの「Expiration Policy」行から、期限切れルールを選択します。
OracleAS Web Cacheで、複数バージョンのオブジェクトのキャッシュおよび識別に使用する値を持つカテゴリCookieを指定できます。
Application Server Controlコンソールで複数のバージョンを持つURLのCookieの値を指定するには、Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「ルール」にナビゲートします。
OracleAS Web Cache Managerで複数のバージョンを持つURLのCookieの値を指定するには、次の手順を実行します。
「Cookie Definitions」ページが表示されます。
「Edit/Add Cookie Definition」ダイアログ・ボックスが表示されます。
「Cookie Association」ページが表示されます。
「Change Cookie Association」ダイアログ・ボックスが表示されます。
キャッシュ・ルールが左のリストに移動し、ダイアログ・ボックスが閉じます。
必要なキャッシュ・ルールが存在しない場合は、「キャッシュ・ルールの構成とルールの関連付け」の説明に従ってキャッシュ・ルールを作成します。ステップ13で、「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスの「Multiple Objects with the Same Selector by Cookies」フィールドからCookieを選択します。
デフォルトでは、OracleAS Web CacheはHTTPリクエスト・ヘッダーの値を解析しません。OracleAS Web Cache Managerで、User-Agent
リクエスト・ヘッダー・フィールドに対して「Multiple Objects with the Same Selector by Other Headers」が選択され、同じURLのUser-Agent
リクエスト・ヘッダーの値が異なる場合、OracleAS Web Cacheでは両方のページが別々にキャッシュされます。たとえば、異なるバージョンのInternet Explorerに対して、あるリクエストではUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows)
というHTTPリクエスト・ヘッダーが送信され、別のリクエストではUser-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows; DigExt)
というHTTPリクエスト・ヘッダーが送信された場合、OracleAS Web Cacheでは2つのページが別々にキャッシュされます。
このデフォルトの動作をオーバーライドするには、特定のクライアントのUser-Agent
パターン文字列を使用してOracleAS Web Cacheを構成します。複数のバージョンを持つオブジェクトの中で影響を受けるドキュメントに対して、OracleAS Web Cacheはx-Oracle-Mapped-User
リクエスト・ヘッダー・フィールドを追加し、User-Agent
の値全体ではなくこの文字列の値を使用します。
x-Oracle-Mapped-User: MAPPEDUSERAGENT_String
ブラウザ・タイプごとに同じページをキャッシュして表示するようにOracleAS Web Cacheを構成するには、次の手順を実行します。
User-Agent
リクエスト・ヘッダーをサポートするページのキャッシュ・ルールを作成します。ステップ13で、「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスの「Multiple Objects with the Same Selector by Other Headers」セクションからUser-Agent
を選択します。
webcache.xml
ファイルを開きます。
GLOBALCACHINGRULES
要素を探します。
GLOBALCACHINGRULES
要素の次の行に、次のサブ要素を追加します。
<USERAGENTREMAPRULE MATCHSTRING="browser
" MAPPEDUSERAGENT="x-Oracle-Mapped-User-Agent_value
" MAPTYPE="USERAGENT"/>
複数のエントリを入力する場合は、OracleAS Web Cacheで一致させる方法に従ってエントリを並べます。これらのルールの順序は、キャッシュ・ルールの優先順位と同じように機能します。
表12-6で、サブ要素の値の入力方法を説明します。
次のwebcache.xml
ファイルの一部は、User-Agent
の再マッピングを示します。
<USERAGENTREMAPRULE MATCHSTRING="MSIE *" MAPPEDUSERAGENT="MSIE" MAPTYPE="USERAGENT"/> <USERAGENTREMAPRULE MATCHSTRING="Mozilla*" MAPPEDUSERAGENT="MOZ" MAPTYPE="USERAGENT"/>
受信リクエストに一致するルールが存在しない場合、OracleAS Web Cacheはデフォルトのマッピングをリクエストに追加します。x-Oracle-Mapped-User-Agent
ヘッダーのデフォルト値は"DEFAULT_USER_AGENT
"です。
これらのマッピング・ルールは、すべての受信リクエストに対して実行されます。複数のマッピング・ルールを作成すると、パフォーマンスが低下する可能性があります。
CACHEABILITYRULE
の<MULTIVERSIONHEADERSRULE>
サブ要素を探します。
<MULTIVERSIONHEADERSRULE> <HTTPHEADER NAME="User-Agent"/> </MULTIVERSIONHEADERSRULE>
User-Agent
の値全体ではなくMAPPEDUSERAGENT
文字列の値に一致させるには、ルールのHTTPHEADER
属性の"User-Agent
"ヘッダーを"x-Oracle-Mapped-User-Agent
"に変更します。
<MULTIVERSIONHEADERSRULE> <HTTPHEADER NAME="x-Oracle-Mapped-User-Agent"/> </MULTIVERSIONHEADERSRULE>
webcache.xml
を保存します。
opmnctl restartproc ias-component=WebCache
埋込みURLパラメータまたはPOST
のボディ・パラメータの値を無視するようOracleAS Web Cacheを構成できます。これにより、同じページをリクエストする複数のセッションに対して同じページを表示するようにOracleAS Web Cacheを構成します。OracleAS Web Cacheでは、最初のリクエストに対するレスポンスがキャッシュされ、同じページへの後続のリクエストに対しては、キャッシュからページが渡されます。
無視するパラメータを指定するには、次の3つの構成オプションを使用できます。
POST
パラメータの値の除外」を参照してください。
OracleAS Web Cacheで、セッションCookie、パーソナライズ属性Cookie、埋込みURLパラメータ、またはPOST
パラメータが存在するリクエストや存在しないリクエストを表示する方法を指定できます。
関連項目
|
Application Server ControlコンソールでセッションCookieまたはパーソナライズ属性をサポートするページにキャッシュ・ポリシーを作成するには、Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「ルール」にナビゲートします。
OracleAS Web Cache ManagerでセッションCookieまたはパーソナライズ属性をサポートするページのキャッシュ・ポリシーを作成する手順は、次のとおりです。
「Session Caching Policy Association」ページが表示されます。
「Add Session Caching Policy」ダイアログ・ボックスが表示されます。
セッションまたはパーソナライズ属性のリスト内に必要な定義が存在しない場合は、「Cancel」をクリックして、「Add Session Caching Policy」ダイアログ・ボックスを終了します。ステップ5に進みます。
「Session Definitions」ページが表示されます。
「Edit/Add Session Definition」ダイアログ・ボックスが表示されます。
POST
パラメータを「URL or POST body parameter」フィールドに入力します。Cookie名およびパラメータの両方を入力した場合は、どちらも同じセッションまたはパーソナライズ属性のサポートに使用する必要があります。異なるセッションまたはパーソナライズ属性をサポートする場合は、別々に定義を作成します。各ページにつき、最高20の定義を指定できます。
関連項目
「Change Session Caching Association」ダイアログ・ボックスが表示されます。
セレクタが左のリストに移動し、ダイアログ・ボックスが閉じます。
必要なセレクタが存在しない場合は、「キャッシュ・ルールの構成とルールの関連付け」の説明に従って、セッションCookie、パーソナライズ属性Cookieまたは埋込みURLパラメータをサポートするページのキャッシュ・ルールを作成します。ステップ13で、「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスの「Session Caching Policies」行から、ポリシーを選択します。
セッション・エンコードされたURLを使用するパーソナライズ・ページのキャッシュ・ルールを指定できます。セッション・エンコードされたURLによって、HTMLの<A HREF=...>
タグに含まれたセッション情報を使用して、Webサイトでユーザー・セッションがトラッキング可能になります。HTMLハイパーリンク・タグのセッションを、セッションCookie、埋込みURLパラメータまたはPOST
のボディ・パラメータから取得したセッション値で置換するように、OracleAS Web Cacheを構成できます。
Application Server Controlコンソールでセッション・エンコードされたURL内のセッション情報を置き換える指示をキャッシュするには、Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「セッション」にナビゲートします。
OracleAS Web Cache Managerでセッション・エンコードされたURL内のセッション情報を置き換える指示をキャッシュするには、次の手順を実行します。
「Session Definitions」ページが表示されます。
「Edit/Add Session Definition」ダイアログ・ボックスが表示されます。
POST
パラメータを「URL or POST body parameter」フィールドに入力します。Cookie名およびパラメータの両方を入力した場合は、どちらも同じセッションの置換要素をサポートしている必要があります。異なる置換要素をサポートする場合は、別々にセッション定義を作成します。各ページにつき、最高20の定義を指定できます。
OracleAS Web Cacheでは、埋込みURLパラメータの値が含まれないリクエストに対して、このデフォルトの文字列が使用されます。このようなリクエストの場合、OracleAS Web Cacheによって値がデフォルトの文字列に置換されます。文字列のデフォルトはdefault
です。たとえば、次の<A HREF=...>
には、値を含まないsession_ID
パラメータが含まれています。
<A HREF="https://oraclestore.oracle.com/OA_ HTML/ibeCCtpSctDspRte.jsp?section=11886&session_ID=">Master Index</A>
文字列をdefault
に設定すると、OracleAS Web Cacheによって値がdefault
に置換されます。
<A HREF="https://oraclestore.oracle.com/OA_ HTML/ibeCCtpSctDspRte.jsp?section=11886&session_ID=default">Master Index</A>
かわりにリクエストがCookieまたはパラメータ設定をオリジナル・サーバーから取得する必要がある場合は、ステップ3を実行します。
ステップ13で、「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスの「Session-Encoded URL」フィールドで「Yes」を選択し、セッション・エンコードされたURLのセッション情報を置き換えます。
POST
ボディ・パラメータの値をオリジナル・サーバーから取得する必要がある場合は、次の追加手順を実行します。
パーソナライズ属性を使用するパーソナライズ・ページのキャッシュ・ルールを指定できます。パーソナライズ属性は、「Hello, Name」などのパーソナライズされた挨拶の形式でよく使用されます。パーソナライズ属性は、アイコン、アドレス、またはショッピング・カートの一部などの形式でも使用されます。OracleAS Web Cacheでは、<!-- WEBCACHETAG-->
タグおよび<!-- WEBCACHEEND-->
タグで囲まれたパーソナライズ属性を、Cookie、埋込みURLパラメータまたはPOST
パラメータから取得した値に置き換えるように構成できます。
Application Server Controlコンソールでセッション・エンコードされたURL内のセッション情報を置き換える指示をキャッシュするには、Web Cacheホーム・ページ→「管理」タブ→「プロパティ」→「アプリケーション」→「セッション」にナビゲートします。
OracleAS Web Cache Managerでパーソナライズ・ページのルールを作成するには、次の手順を実行します。
「Session Definitions」ページが表示されます。
「Edit/Add Session Definition」ダイアログ・ボックスが表示されます。
たとえば、名前を使用した挨拶文のパーソナライズ属性の場合は、first_name01
と入力します。
POST
パラメータを「URL or POST body parameter」フィールドに入力します。Cookie名およびパラメータの両方を入力した場合は、どちらも同じパーソナライズ属性の置換要素をサポートしている必要があります。異なる置換要素をサポートする場合は、別々にパーソナライズ定義を作成します。各ページにつき、最高20の定義を指定できます。
POST
ボディ・パラメータの値に使用されるデフォルトの文字列を入力します。OracleAS Web Cacheでは、<!-- WEBCACHETAG-->
タグおよび<!-- WEBCACHEEND-->
タグが含まれるページで、パーソナライズ属性の値が含まれないリクエストに対してこのデフォルトの文字列が使用されます。このようなリクエストの場合、OracleAS Web Cacheではデフォルトの文字列の値が使用されます。文字列のデフォルトはdefault
です。次に例を示します。
<B><!-- WEBCACHETAG="first_name01"-->default<!-- WEBCACHEEND--></B>
かわりにリクエストがCookieまたはパラメータ設定をオリジナル・サーバーから取得する必要がある場合は、ステップ3を実行します。
Surrogate-Control
レスポンス・ヘッダー・フィールドを含むページを構成します。
Surrogate-Control: content="webcache/1.0"
POST
ボディ・パラメータの値をオリジナル・サーバーから取得する必要がある場合は、次の追加手順を実行します。
<!-- WEBCACHETAG-->
および<!-- WEBCACHEEND-->
タグを使用して、パーソナライズ属性を使用したページを構成します。
<!-- WEBCACHETAG="personalized_attribute"--> personalized attribute HTML segment <!-- WEBCACHEEND-->
いずれのタグも、<!--
の後に必ず空白を入れてください。
重要
コンテンツ・アセンブリおよびページの部分的なキャッシュ用のESIタグが含まれているページでは、 |
HTML内で<!-- ...-->
コメント・タグが使用可能な場所であれば、<!-- WEBCACHETAG-->
および<!-- WEBCACHEEND-->
タグは任意の位置に使用可能です。たとえば、<!-- WEBCACHETAG-->
および<!-- WEBCACHEEND-->
タグを他のHTMLタグのペアの間で使用できますが、1つのHTMLタグ内では使用できません。
次の例で、<!-- WEBCACHETAG="p_name"-->
は<input>
タグ内に置かれていますが、これは<!-- WEBCACHETAG-->
の無効な使用方法の例です。
htp.p('<FORM ACTION="test" METHOD="GET">'); htp.p('<TABLE BORDER="0" > <TR> <TD><INPUT TYPE="text" NAME="p_name" SIZE="8" VALUE="<!-- WEBCACHETAG="p_name"-->'||p_name||'<!-- WEBCACHEEND-->"></td> </TR> <TR> <TD><input type="submit" value="Search"></TD> </TR> </TABLE>');
1つのHTMLタグ内でパーソナライズを行うには、ESIを使用してください。
図12-3のmonthly.htm
の例で、パーソナライズされたコンテンツのキャッシュ方法について説明します。
October
は、他の値に置換可能なパーソナライズ対象コンテンツです。
このページのURLはmonthly.htm?Month=
month
で、Month
は埋込みURLパラメータです。
monthly.htm
およびパーソナライズ対象コンテンツをキャッシュするには、次の手順を実行します。
TestMonth
というパーソナライズ属性を埋込みURLパラメータMonth
にマップします。Month
を使用)を使用するセッション・キャッシュ・ポリシーを作成します。<!-- WEBCACHETAG-->
および<!-- WEBCACHEEND-->
HTMLタグをmonthly.htm
に追加します。
Current Month is: <!-- WEBCACHETAG="TestMonth"-->October<!-- WEBCACHEEND-->
monthly.htm
のキャッシュ・ポリシーを作成します。
OracleAS Web Cacheによってmonthly.htm
がキャッシュされていることを検証するには、次の手順を実行します。
monthly.htm
へのリクエストは、monthly.htm?Month=October
というURLに送信します。最初のリクエストはOracleAS Web CacheによってWebアプリケーション・サーバーに転送され、Month
パラメータに対して値October
が設定されます。この最初のリクエストにより、monthly.htm
がキャッシュに格納されます。
monthly.htm
のリクエストをmonthly.htm?Month=January
というURLに送信します。図12-4に示すように、OracleAS Web Cacheによって、October
が値January
に置換されます。
一部のWebサイトでは、ユーザーがページ間を移動する間、セッションを使用する必要があります。セッション要件を維持するには、それらのページ用にセッション/パーソナライズ属性関連キャッシュ・ルールを作成します。これにより、セッションを持たないリクエストは、必ずオリジナル・サーバーによって表示されます。
通常セッションの確立を必要とする一般的なサイトのエントリ・ページ(/
など)は、セッションを確立するため、セッションを持っていないすべての新規ユーザーについてキャッシュ不可になります。セッションの確立を維持したままこれらのページをキャッシュするには、ご使用のアプリケーションに次のような変更を加えます。
/
など)用の空白のページを作成します。
ステップ13で、「Edit/Add Caching, Personalization, and Compression Rule」ダイアログ・ボックスの「Session Caching Policies」行から、値が「Cache with session」および「Cache without session」のセッション・キャッシュ・ポリシーを選択します。
この構成により、エントリURLに対する最初のユーザー・リクエストはすべて、まず、最小限のリソースのみで生成される空白のページに進みます。クライアントは、Webアプリケーション・サーバーからレスポンスおよびセッションの確立を受信します。その後の、エントリ・ページに対するリダイレクトされたリクエストにはセッションが関連付けられ、エントリ・ページをキャッシュで処理することが可能になります。
セッションを必要とするページのセッションCookieを、JavaScriptを使用して設定する方法でも解決できます。
アプリケーション開発者は、Application Server ControlコンソールまたはOracleAS Web Cache Managerで設定するキャッシュ・ルールに加え、またはその代替として、多くのキャッシュ属性をHTTPレスポンス・メッセージのヘッダーに格納することも可能です。この機能により、Webアプリケーション・サーバーがApplication Server ControlコンソールまたはOracleAS Web Cache Managerインタフェースでの設定をオーバーライドしたり、サード・パーティ製キャッシュでOracleAS Web Cacheのキャッシュ属性を使用することが可能になります。次の属性を除き、「キャッシュ・ルールの構成とルールの関連付け」に記載されているすべての属性がサポートされています。
この機能を使用するには、次の項の説明に従って、HTTPレスポンスにSurrogate-Control
レスポンス・ヘッダー・フィールドを設定します。
関連項目
OracleAS Web Cacheが |
Surrogate-Control
レスポンス・ヘッダー・フィールドによって、アプリケーション開発者は、オブジェクトのキャッシュ属性を指定できます。このレスポンス・ヘッダー・フィールドを使用すると、管理インタフェースのOracle Enterprise Manager 10g Application Server ControlコンソールまたはOracleAS Web Cache Managerによって構成されたキャッシュ・ルールをWebアプリケーション・サーバー側でオーバーライドできます。
Surrogate-Control
レスポンス・ヘッダー・フィールドは次のような構文をサポートします。
Surrogate-Control:[content=content_type, content_type,..] [no-store][max-age=expiration_time
[+
removal_time
]
] [vary=headers(header
header
...)][coookie(cookie_name
cookie_name
...)] [compress=yes|no]
表12-7に、サポートされている制御ディレクティブを示します。
制御ディレクティブ | 説明 |
---|---|
|
必須の処理の種類を指定します。
関連項目: 各処理バージョンに対してサポートされるESIタグの詳細は、表16-2を参照してください。 |
|
OracleAS Web Cacheがオブジェクトをキャッシュしないよう指定します。 |
|
複数バージョンのオブジェクトをキャッシュして識別するために、OracleAS Web Cacheで使用されるHTTPリクエスト・ヘッダーまたはCookieを指定します。次の書式を使用します。
/fは、HTTPリクエスト・ヘッダーまたはCookieが存在した場合にのみオブジェクトのバージョンをキャッシュするようにOracleAS Web Cacheに指示する場合に指定します。HTTPリクエスト・ヘッダーまたはCookieが存在するかどうかに関係なくオブジェクトのバージョンをキャッシュするようにOracleAS Web Cacheに指示するには、 使用方法: |
|
OracleAS Web Cacheで、圧縮されたキャッシュ可能およびキャッシュ不可のオブジェクトをすべてのブラウザ・タイプに送信する場合は この制御ディレクティブでは、ブラウザ・タイプを指定することはできません。yesを指定したときに、ブラウザ・タイプを制限する必要がある場合は、OracleAS Web Cache Managerで圧縮キャッシュ・ルールを指定します。「作業1: キャッシュ・ルールの作成」のステップ11を参照してください。 注意: 圧縮が有効化されていても、次のものはOracleAS Web Cacheによって圧縮されません。
|
|
OracleAS Web Cacheがオブジェクトをキャッシュするよう指定します。 オブジェクトがキャッシュに入れられてから期限切れになるまでの秒数を指定します。オプションで、期限切れ後のオブジェクトを削除するまでの秒数を指定します。次の書式を使用します。
使用方法: |
content="ORAESI/9.0.4"
、content="ESI-Inline/1.0"
、content="ESI-INV/1.0"
、content="ESI/1.0"
を、content="webcache/1.0"
と同時に使用することはできません。次の例では、Surrogate-Control
レスポンス・ヘッダー・フィールドにより、オブジェクトがキャッシュに入ってから30秒後に期限切れにし、期限切れ後60秒で削除するよう指定します。また、ESIタグが含まれているオブジェクトを処理するよう指定しています。
Surrogate-Control: max-age=30+60, content="ORAESI/9.0.4"
次の例では、Surrogate-Control
レスポンス・ヘッダー・フィールドより、オブジェクトをキャッシュしないよう指定します。
Surrogate-Control: no-store
次の例では、Surrogate-Control
レスポンス・ヘッダー・フィールドは、content
制御ディレクティブでESI処理を指定します。vary
制御ディレクティブは、リクエストにHTTP Accept
リクエスト・ヘッダーが含まれているかどうかに関係なく、複数バージョンのオブジェクトのバージョンをキャッシュすることを指定します。
Surrogate-Control: content="ORAESI/9.0.4", vary=headers(Accept)
次の同様の例では、Surrogate-Control
レスポンス・ヘッダー・フィールドは、content
制御ディレクティブでESI処理を指定します。vary
制御ディレクティブは、リクエストに、Accept
およびMyCustomHeader
のヘッダーや、news
およびsports
のCookieが含まれている場合にのみ、複数バージョンのオブジェクトのバージョンをキャッシュすることを指定します。
Surrogate-Control: content="ORAESI/9.0.4", vary=headers(Accept/f);cookies(news/f sports/f)
この項では、フラグメントによるWebページの動的組立て、およびキャッシュ可能またはキャッシュ不可のページ・フラグメント用ルールの作成方法について説明します。次の項目が含まれます。
ページの部分的なキャッシュを使用するには、次の手順を実行します。
重要
<!-- WEBCACHETAG-->
および<!-- WEBCACHEEND-->
タグが含まれているページでは、ESIタグは使用できません。単純なパーソナライズを必要とし、ESIを使用している場合は、「単純なパーソナライズでのESIの使用」を参照してください。
Surrogate-Control
レスポンス・ヘッダー・フィールドを設定します。次に例を示します。
Surrogate-Control: max-age=30+60, content="ORAESI/9.0.4"
Surrogate-Control
レスポンス・ヘッダー・フィールドに含まれていない場合は、そのページのキャッシュ・ルールを作成します。
Surrogate-Control
レスポンス・ヘッダー・フィールドを使用します。
Surrogate-Control
レスポンス・ヘッダー・フィールドに含まれていない場合は、そのフラグメントのキャッシュ・ルールを作成します。
関連項目
Surrogate-Control
レスポンス・ヘッダー・フィールドの詳細および設定方法は、「Surrogate-Controlレスポンス・ヘッダーをキャッシュ・ルールの代替として使用」を参照してください。
変数式を使用して、パーソナライズ属性およびセッション・エンコードされたURLと同様の置換を行うことが可能です。ESIの他の機能を使用している場合には単純なパーソナライズにESIを使用し、それ以外の場合は「セッションの確立を含むポピュラーなページに対するルールの構成」で説明されている方法をそのまま使用することをお薦めします。
たとえば、次のHTMLの抜粋では、<!-- WEBCACHETAG-->
および<!-- WEBCACHEEND-->
タグを使用して、クライアントのブラウザからUserName
というCookieとともに渡される値に基づいて、ユーザー名を置換します。さらに、sessionID
というCookieに含まれているセッション情報を使用して、セッション情報がユーザーごとに置換されます。
Welcome <!-- WEBCACHETAG="UserName"-->John<!-- WEBCACHEEND -->! Here is a <A HREF="/jsp/myPage.jsp?sessionID=13001">link</A>.
次のESIマークアップにより、同じ結果が得られます。
<esi:vars> Welcome $(HTTP_COOKIE{'username'})! Here is a <A HREF="/jsp/myPage.jsp?sessionID=$(QUERY_STRING{'sessionid'})">link</A>. </esi:vars>
<esi:vars>
タグを使用すると、ESIタグの外部でESI環境変数を使用できます。変数は、他のESIタグでも使用可能です。
この項では、ESIの使用例を示します。次の項目が含まれます。
図12-5に、Markという登録ユーザー名のポータル・サイト・レスポンス・ページhttp:
//www.company.com/servlet/oportal?username=Mark
を示します。
このページは、OracleAS Web Cacheによってアセンブリされます。パーソナライズされた挨拶文、気象情報、株式情報、販促広告、ニュースおよびスポーツなどのフラグメントに関してESIマークアップ・タグによって構成されたテンプレート・ページは、Markの環境設定に基づいてアセンブリされます。たとえば、Markがサンフランシスコの気象情報を選択すると、アプリケーションはサンフランシスコの気象情報を検索し、その結果を最終的なHTMLページに出力します。これは動的コンテンツなので、このページはキャッシュできません。一方、ESIマークアップ・タグを使用している場合、OracleAS Web Cacheで大部分のコンテンツの組立てキャッシュが行われます。
次の項では、<esi:inline>
および<esi:include>
タグを使用してテンプレート・ページやそのフラグメントを実装する方法を説明します。
この項では、<esi:inline>
タグの断片化やアセンブリによる、リアルタイム・エレメントが含まれないページの動的コンテンツ・キャッシュの有効性について説明します。フェッチ不可フラグメントをサポートする既存アプリケーションに<esi:inline>
タグを適用する方法を示します。<esi:inline>
タグによりキャッシュ・コンテンツの容量が減少し、動的コンテンツを独立させることでキャッシュ・ヒット率が向上します。
注意
アプリケーションでそれぞれ別々にフェッチ可能なフラグメントをサポートしている場合、 |
<esi:inline>
タグを使用するには、portal.esi
内の論理フラグメントを<esi:inline>
タグでマークします。パーソナライズされた挨拶文、「Weather Forecast」、「My Stocks」、「Promotion campaign」、「Latest News」および「Latest Sports News」には個々のキャッシュ・プロパティがあるので、これらはフラグメントになり共有可能です。「My Stock」フラグメントは、さらに個別の株価に対応する5つのサブフラグメントに細分されます。また、フラグメントの共有を促すため、パーソナライズされた2つのフラグメントに共通するHTMLコード・セクションをESIフラグメントとして囲み、一定の名前を与えます。このようにすれば、様々なテンプレートに含まれる共通データができるだけ少なくてすみます。
例12-1に、<esi:inline>
タグ付きのportal.esi
を示します。
<esi:inline name="/Common_Fragment_1" > <!-- First common fragment --> <HTML> ... <!-- Personalized Greeting With ESI variable --> Welcome, $(QUERY_STRING{username})! </esi:inline> <esi:inline name="/Weathers_San_Francisco" > ... <!-- Personalized Weather Forecast --> Weather Forecast for San Francisco <TABLE> <TR> <TD> Currently: 50F </TD> </TR> </TABLE> </esi:inline> <esi:inline name="/Common_Fragment_2" > <!-- Second common fragment --> ... </esi:inline> <esi:inline name="/Stocks_$(QUERY_STRING{username})" > <!-- Personalized Stock Quote Selections --> <TABLE> <TR> <TD> <esi:inline name="/ticker_IBM"> IBM 84.99 </esi:inline> <BR> <esi:inline name="/ticker_ORCL"> ORCL 13.379 </esi:inline> <BR> <esi:inline name="/ticker_YHOO"> YHOO 27.15 </esi:inline> <TD> </TR> </TABLE> </esi:inline> <esi:inline name="/Common_Fragment_3"> <!-- Third common fragment --> ... </esi:inline> <esi:inline name="/ExternalAdvertisement"> <!-- External Advertisement --> <TABLE> <TR> <TD> <a href="http://www.companyad.com/advert?promotionID=126532"> <img src="http://www.companyad.com/advert_img?promotionID=126532"> </a> </TD> </TR> </TABLE> </esi:inline> <esi:inline name="/Common_Fragment_4"> <!-- Fourth common fragment --> ... </esi:inline> <esi:inline name="/Top_News_Finance"> <!-- Personalized Top News --> Latest News for finance <TABLE> <TR> Tech Spending Growth Indexes Little Changes Home Sales Hit Record High Gas Prices Dip Again </TR> </TABLE> </esi:inline> <esi:inline name="/Sports_News_Soccer" > <!-- Personalized Sports News --> Latest Sports News for Soccer <TABLE> <TR> Preparation for World Cup Youth Cup game on a Sunday Latest Scores </TR> </TABLE> </esi:inline> <esi:inline name="/Common_Fragment_5" > ... </esi:inline>
例12-2に、パーソナライズされた挨拶文のマークアップを示します。フラグメントは、異なるユーザーに属するパーソナライズ・ページすべてに共通しています。<esi:inline>
タグによりこのフラグメントには一定の名前が割り当てられるので、異なるユーザー(例: John)が同じフラグメント名の同じフラグメントをテンプレートとして持っていることもあります。2つのフラグメントは、名前が同一の場合に限り共有されます。すべてのテンプレートに含まれる同一の共有フラグメントが期限切れまたは無効な場合に、必要な更新は1回のみです。$(QUERY_STRING{username})
は、値username
の値へのアクセスを提供するESI環境変数です。アプリケーションはusername
問合せ文字列パラメータを使用してユーザー名を渡すので、この変数はここで使用されます。この変数を使用することにより、最初のフラグメントが全ユーザーに共有されます。
<esi:inline name="/Common_Fragment_1" > <!-- First common fragment --> <HTML> ... <!-- Personalized Greeting With ESI variable --> Welcome, $(QUERY_STRING{username})! </esi:inline>
例12-3に、「Weather Forecast」のマークアップを示します。フラグメントは各都市に固有です。同じ都市を選択する各テンプレートは、フラグメントのネーミング上、このフラグメントをMarkのページと共有することになります。
<esi:inline name="/Weathers_San_Francisco" > <!-- Personalized Weather Forecast --> Weather Forecast for San Francisco <TABLE> <TR> <TD> Currently: 50F </TD> </TR> </TABLE> </esi:inline>
例12-4に、「My Stocks」のマークアップを示します。株価フラグメントは、Markのページにあるすべての指定銘柄を囲みます。このフラグメントは、ネストされた<esi:inline>
タグを使用して、さらに個別の指定銘柄に対応する5つのサブフラグメントに細分されます。したがって、MarkのESIテンプレートはMarkの選択株フラグメントを参照し、さらに指定銘柄のフラグメントを参照します。指定銘柄は多数のユーザーの選択株フラグメントによって共有されますが、選択株フラグメント自体はMarkの固有のテンプレートでもあります。このマークアップよって固有の情報が共有情報から分離され、キャッシュの更新と個人の選択株に割り当てられる領域を大幅に抑制できます。
<esi:inline name="/Stocks_$(QUERY_STRING{username})" > <!-- Personalized Stock Quote Selections --> <TABLE> <TR> <TD> <esi:inline name="/ticker_IBM"> IBM 84.99 </esi:inline> <BR> <esi:inline name="/ticker_ORCL"> ORCL 13.379 </esi:inline> <BR> <esi:inline name="/ticker_YHOO"> YHOO 27.15 </esi:inline> <TD> </TR> </TABLE> </esi:inline>
例12-5に、「Promotion」セクションの広告を参照するマークアップを示します。promotionID
は、ユーザー識別情報に基づくIDです。
<esi:inline name="/ExternalAdvertisement"> <!-- External Advertisement --> <TABLE> <TR> <TD> <a href="http://www.companyad.com/advert?promotionID=126532"> <img src="http://www.companyad.com/advert_img?promotionID=126532"> </a> </TD> </TR> </TABLE> </esi:inline>
レスポンスのたびに変化する入替式広告は、フェッチ不可ESI <esi:inline>
キャッシュを利用する価値がないリアルタイム・コンテンツの一例です。フェッチ不可ESIのinlineフラグメントとしてわずかな部分でもリアルタイム・コンテンツが埋め込まれている場合、常にレスポンス全体を再生成してフェッチする必要があります。このようなリアルタイム・フラグメントにESIおよび動的コンテンツのキャッシュを使用するには、<esi:include>
タグを使用します。
「Latest News」および「Latest Sports News」のフラグメントは、気象情報のフラグメントと同様です。共通する領域もすべてフラグメントとして定義されます。これらをテンプレートの一部として残しておくこともできますが、記憶領域を浪費します。例12-6にマークアップを示します。
<esi:inline name="/Top_News_Finance"> <!-- Personalized Top News --> Latest News for finance <TABLE> <TR> Tech Spending Growth Indexes Little Changes Home Sales Hit Record High Gas Prices Dip Again </TR> </TABLE> </esi:inline> <esi:inline name="/Sports_News_Soccer" > <!-- Personalized Sports News --> Latest Sports News for Soccer <TABLE> <TR> Preparation for World Cup Youth Cup game on a Sunday Latest Scores </TR> </TABLE> </esi:inline>
この項では、<esi:include>
タグを使用して、テンプレートにコンテンツが埋め込まれていないフェッチ可能フラグメントを断片化やアセンブルする方法について示します。
例12-7に、<esi:include>
タグ付きのportal.esi
を示します。
<HTML>
...
<!-- Personal Profile -->
<esi:comment text="Profile refers to environment variables stored in
/servlet/GetProfile. GetProfile servlet enables access to a set of environment
variables with personal profile information."/>
<esi:environment src="/servlet/GetProfile?username=$(QUERY_STRING{username})"
name="Profile"/>
...
<!-- Personalized Greeting With ESI variable -->
<esi:vars>Welcome, $(QUERY_STRING{username})!</esi:vars>
...
<!-- Personalized Weather Forecast -->
<TABLE>
<TR>
<TD>
<esi:include
src="/servlet/Weather?city=$(Profile{city})&state=$(Profile{state})"/>
</TD>
</TR>
</TABLE>
...
<!-- Personalized Stock Quote Selections -->
<TABLE>
<TR>
<TD>
<esi:include src="/servlet/PersonalizedStockSelection?username=$(QUERY_
STRING{username})"/>
</TD>
</TR>
</TABLE>
...
<!-- External Advertisement -->
<TABLE>
<TR>
<TD>
<esi:try>
<esi:attempt>
<esi:comment text="Include an ad"/>
<esi:include src="/servlet/Advert"/>
</esi:attempt>
<esi:except>
<esi:comment text="Just write an HTML link instead"/>
<A HREF="http://www.oracle.com">http://www.oracle.com</a>
</esi:except>
</esi:try>
</TD>
</TR>
</TABLE>
...
<!-- Personalized Top News -->
Latest News for <esi:vars>$(Profile{news})</esi:vars>
<TABLE>
<TR>
<TD>
<esi:choose>
<esi:when test="$(Profile{news}) == 'Internet'">
<esi:include src="/servlet/News?type=Top&topic=internet"/>
</esi:when>
<esi:when test="$(Profile{news}) == 'finance'">
<esi:include src="/servlet/News?type=Top&topic=business"/>
</esi:when>
<esi:otherwise>
<esi:include src="/servlet/News?type=Top&topic=technology"/>
</esi:otherwise>
</esi:choose>
</TD>
</TR>
</TABLE>
...
<!-- Personalized Sports News -->
Latest Sports News for <esi:vars>$(Profile{sport})</esi:vars>
<TABLE>
<TR>
<TD>
<esi:choose>
<esi:when test="$(Profile{sport}) == 'golf'">
<esi:include src="/servlet/News?type=Sports&topic=golf"/>
</esi:when>
<esi:when test="$(Profile{sport}) == 'soccer'">
<esi:include src="/servlet/News?type=Sports&topic=soccer"/>
</esi:when>
<esi:when test="$(Profile{sport}) == 'basketball'">
<esi:include src="/servlet/News?type=Sports&topic=basketball"/>
</esi:when>
<esi:when test="$(Profile{sport}) == 'baseball'">
<esi:include src="/servlet/News?type=Sports&topic=baseball"/>
</esi:when>
<esi:otherwise>
<esi:include src="/servlet/News?type=Sports&topic=soccer"/>
</esi:otherwise>
</esi:choose>
</TD>
</TR>
</TABLE>
例12-8では、GetProfile
に格納されている環境変数を参照するようにProfile
を指定しています。GetProfile
により、ユーザー・プロファイル変数へのアクセスが可能になります。これは挿入されているフラグメントのパラメータとして使用されます。
<!-- Personal Profile --> <esi:comment text="Profile refers to environment variables stored in /servlet/GetProfile. GetProfile servlet enables access to a set of environment variables with personal profile information."/> <esi:environment src="/servlet/GetProfile?username=$(QUERY_STRING{username})" name="Profile"/>
例12-9に、city
、state
、news
およびsports
環境変数へのアクセスを可能にするGetProfile
を示します。
<?xml version="1.0"?> <esi-environment esiversion="ORAESI/9.0.4"> <city>San_Francisco</city> <state>CA</state> <news>finance</news> <sports>soccer</sports> </esi-environment>
例12-10に、パーソナライズされた挨拶文Welcome, Mark!
のマークアップを示します。パーソナライズされた挨拶文は、<esi:vars>
タグによって表示されます。このタグの挨拶文は、URLに埋め込まれたusername
パラメータに基づいています。パラメータusername
は、登録ユーザー名です。このマークアップにより、パーソナライズされた挨拶文が、キャッシュ可能なテンプレート・ページに含まれます。
<esi:vars>Welcome, $(QUERY_STRING{username})!</esi:vars>
例12-11に、「Weather Forecast」のマークアップを示します。「Weather Forecast」にはサーブレット・フラグメント名Weather
が含まれています。これはGetProfile
内でユーザーのcity
およびstate
環境変数値を使用し、ユーザーに適した天気予報を表示します。GetProfile
のcity
環境変数値はSan Francisco
、state
環境変数値がCalifornia
なので、カリフォルニア州サンフランシスコの天気予報が表示されます。
<TABLE> <TR> <TD> <esi:include src="/servlet/Weather?city=$(Profile{city})&state=$(Profile{state})"/> </TD> </TR> </TABLE>
「My Stocks」のマークアップを例12-12に示します。「My Stocks」には、PersonalizedStockSelection
というサーブレット・フラグメントが含まれています。表示される株式は、URLにエンコードされたuserID
パラメータに基づきます。userID
は、登録ユーザーの一意のIDです。
<TABLE> <TR> <TD> <esi:include src="/servlet/PersonalizedStockSelection?username=$(QUERY_ STRING{username})"/> </TD> </TR> </TABLE>
例12-13に、挿入されているフラグメントPersonalizedStockSelection
のマークアップを示します。3つの株価フラグメントIBM、ORCLおよびYHOOが含まれています。
<TABLE> <TR> <TD> <BR> <esi:include src="Quote?symbol=IBM"/> <BR> <esi:include src="Quote?symbol=ORCL"/> <BR> <esi:include src="Quote?symbol=YHOO"/> <BR> </TD> </TR> </TABLE>
ユーザーごとに出力が異なるため、PersonalizedStockSelection
フラグメントはキャッシュできません。ただし、内部の株価に対するレスポンスはキャッシュ可能で、複数のユーザー間で株価を共有できます。多数のユーザーが株価を共有していても、株価が更新された場合、1回のブラウザの再ロードのみ必要です。たとえば、例12-14に、Scottという別のユーザーのPersonalizedStockSelection
フラグメントを示します。3つの株価フラグメントIBM、ORCLおよびSCOが含まれています。前述のとおり、IBMとORCLはMarkと共有されています。Markが先にページを再ロードして株価をキャッシュすると、ScottのIBMとORCLの株価も自動的に更新されます。
<TABLE> <TR> <TD> <BR> <esi:include src="Quote?symbol=IBM"/> <BR> <esi:include src="Quote?symbol=ORCL"/> <BR> <esi:include src="Quote?symbol=SCO"/> <BR> </TD> </TR> </TABLE>
例12-15に、「Promotion」セクションの入替式広告のマークアップを示します。広告は、レスポンスのたびに変化するということで入れ替わるようになっています。OracleAS Web Cacheでは、テンプレート・ページから、そこにインクルードするイメージ・フラグメントのレスポンスの生成を分離することにより、テンプレートをキャッシュしつつ、動的な広告をテンプレートに統合することが可能です。
<TABLE> <TR> <TD> <esi:try> <esi:attempt> <esi:comment text="Include an ad"/> <esi:include src="/servlet/Advert"/> </esi:attempt> <esi:except> <esi:comment text="Just write an HTML link instead"/> <A HREF="www.oracle.com">www.oracle.com</a> </esi:except> </esi:try> </TD> </TR> </TABLE>
例12-16に示すように、バナーに含まれているイメージ・フラグメントのレスポンスはキャッシュできません。ユーザーがこのページをリクエストすると、OracleAS Web Cacheにより、バナーを生成するようにリクエストがWebアプリケーション・サーバーに送信されます。Webアプリケーション・サーバーから、Advert
サーブレットにより、リクエストのバナーが生成されます。
<TABLE> <TR> <TD> <A HREF="http://www.companyad.com/redirect?refID=11934502"> <IMG src="http://www.companyad.com/advert_img?refID=11934502"></A> </TD> </TR> </TABLE>
例12-17に示すように、次にユーザーがページを再ロードすると、Advert
サーブレットによってそのリクエスト用に別のバナーが生成されます。
<TABLE> <TR> <TD> <A HREF="http://www.companyad.com/redirect?refID=123456602"> <IMG src="http://www.companyad.com/advert_img?refID=123456602"></A> </TD> </TR> </TABLE>
バナーは、<esi:try>
タグの代替処理によって表示されます。Advert
サーブレットが実行できない場合は、www.oracle.com
へのリンクがバナーの位置に表示されます。
例12-18に、「Latest News」および「Latest Sports News」のマークアップを示します。
news
カテゴリでinternet
、finance
またはtechnology
のいずれを選択したかに基づいて、ニュース・ヘッドラインが表示されます。これには、<esi:choose>
タグによる条件処理が使用されます。GetProfile
のnews
環境変数値がfinance
のため、表示されるヘッドラインは金融関連のものです。/servlet/News?type=Top&topic=business
sports
カテゴリでgolf
、soccer
、basketball
、baseball
またはsoccer
のいずれを選択したかに基づき、条件処理によってスポーツ・ヘッドラインが表示されます。GetProfile
のsports
環境変数値がsoccer
のため、出力結果にはサッカー関連のヘッドラインが含まれます。/servlet/News?type=Sports&topic=soccer
Latest News for <esi:vars>$(Profile{news})</esi:vars> <TABLE> <TR> <TD> <esi:choose> <esi:when test="$(Profile{news}) == 'internet'"> <esi:include src="/servlet/News?type=Top&topic=internet"/> </esi:when> <esi:when test="$(Profile{news}) == 'finance'"> <esi:include src="/servlet/News?type=Top&topic=business"/> </esi:when> <esi:otherwise> <esi:include src="/servlet/News?type=Top&topic=technology"/> </esi:otherwise> </esi:choose> </TD> </TR> </TABLE> ... <!-- Personalized Sports News --> Latest Sports News for <esi:vars>$(Profile{sport})</esi:vars> <TABLE> <TR> <TD> <esi:choose> <esi:when test="$(Profile{sport}) == 'golf'"> <esi:include src="/servlet/News?type=Sports&topic=golf"/> </esi:when> <esi:when test="$(Profile{sport}) == 'soccer'"> <esi:include src="/servlet/News?type=Sports&topic=soccer"/> </esi:when> <esi:when test="$(Profile{sport}) == 'basketball'"> <esi:include src="/servlet/News?type=Sports&topic=basketball"/> </esi:when> <esi:when test="$(Profile{sport}) == 'baseball'"> <esi:include src="/servlet/News?type=Sports&topic=baseball"/> </esi:when> <esi:otherwise> <esi:include src="/servlet/News?type=Sports&topic=soccer"/> </esi:otherwise> </esi:choose> </TD> </TR> </TABLE>
「セッションの確立を含むポピュラーなページに対するルールの構成」のステップ5で説明されているように、<!-- WEBCACHETAG-->
タグおよび<!-- WEBCACHEEND-->
タグは他のHTMLタグのペアの間で使用できますが、HTMLタグ内では使用できません。ただし、ESI変数はHTMLタグ内で使用可能です。
たとえば、例12-19を参照してください。この例のHTMLコードでは、テキスト・ボックスが含まれるHTMLフォームにPL/SQLが使用されています。
htp.p('<form action="test" method="GET">'); htp.p('<table border="0" > <tr> <td><input type="text" name="p_name" size="8" value="'||p_name||'"></td> </tr> <tr> <td><input type="submit" value="Search"></td> </tr> </table>');
例12-20に、<esi:vars>
タグとともに$HTTP_COOKIE
変数を使用して、p_name
の値をユーザー名に置換する方法を示します。
htp.p('<form action="test" method="GET">'); htp.p('<table border="0" > <tr><esi:vars> <td><input type="text" name="p_name" size="8" value="$(HTTP_COOKIE{'p_name'}"></td> </tr></esi:vars> <tr> <td><input type="submit" value="Search"></td> </tr> </table>');
|
![]() Copyright © 2002, 2006 Oracle. All Rights Reserved. |
|