AEM パブリッシュ

最終更新日: 2024-01-29
  • 作成対象:
  • Intermediate
    Developer

AEM パブリッシュサービスには、AEM as a Cloud Service CDN と AEM Dispatcher という 2 つのプライマリキャッシュレイヤーがあります。オプションで、顧客が管理する CDN を AEM as a Cloud Service CDN の前に配置できます。AEM as a Cloud Service CDN は、コンテンツのエッジ配信を提供し、世界中のユーザーに少ない待ち時間でエクスペリエンスを配信できるようにします。AEM Dispatcher は、AEM パブリッシュの直前にキャッシュを提供し、AEM パブリッシュ自体の不要な読み込みを軽減します。

AEM パブリッシュキャッシュの概要図

CDN

AEM as a Cloud Service の CDN のキャッシュは、HTTP 応答キャッシュヘッダーによって制御され、コンテンツをキャッシュして、鮮度とパフォーマンスのバランスを最適化することを目的としています。CDN は、エンドユーザーと AEM Dispatcher の間に位置し、可能な限りエンドユーザーに近いコンテンツをキャッシュして、高いパフォーマンスを実現します。

AEM パブリッシュ CDN

CDN でのコンテンツのキャッシュ方法の設定は、HTTP 応答でのキャッシュヘッダーの設定に限定されます。これらのキャッシュヘッダーは、通常、mod_headers を使用して、AEM Dispatcher のホスト設定で行われますが、AEM パブリッシュ自体で実行されるカスタム Java™ コードで設定することもできます。

HTTP リクエスト/応答がキャッシュされるタイミング

AEM as a Cloud Service CDN は HTTP 応答のみをキャッシュし、以下の条件をすべて満たす必要があります。

  • HTTP リクエストのステータスは 2xx または 3xx
  • HTTP リクエストメソッドは GET または HEAD
  • 次の HTTP 応答ヘッダー(Cache-ControlSurrogate-Control または Expires)の少なくとも 1 つが存在。
  • HTTP 応答には、任意のコンテンツタイプ(HTML、JSON、CSS、JS、バイナリファイルなど)を指定できます。

デフォルトでは、AEM Dispatcher によってキャッシュされない HTTP 応答は、CDN でのキャッシュを避けるために、HTTP 応答キャッシュヘッダーを自動的に削除します。この動作は、必要に応じて mod_headersHeader always set ... ディレクティブを使用して、オーバーライドできます。

キャッシュの内容

AEM as a Cloud Service CDN は、以下をキャッシュします。

  • HTTP 応答本文
  • HTTP 応答ヘッダー

通常、単一の URL に対する HTTP リクエスト/応答は、単一のオブジェクトとしてキャッシュされます。ただし、HTTP 応答に Vary ヘッダーが設定されている場合、CDN は単一の URL に対して複数のオブジェクトのキャッシュを処理できます。値が厳密に制御されていないヘッダーには Vary を指定しないでください。これにより、多くのキャッシュミスが発生し、キャッシュのヒット率が低下する可能性があります。AEM Dispatcher で様々なリクエストのキャッシュをサポートするには、バリアントキャッシュのドキュメントを確認してください

キャッシュの有効期間

AEM パブリッシュの CDN は、TTL(有効期間)ベースです。つまり、キャッシュの有効期間は、Cache-ControlSurrogate-Control または Expires の HTTP 応答ヘッダーによって決まります。HTTP 応答キャッシュヘッダーがプロジェクトによって設定されておらず、実施要件の条件が満たされている場合、アドビはデフォルトのキャッシュの有効期間を 10 分(600 秒)に設定します。

キャッシュヘッダーが CDN キャッシュの有効期間に与える影響を以下に示します。

  • Cache-Control HTTP 応答ヘッダーは、web ブラウザーと CDN に応答をキャッシュする期間を指示します。値は秒単位です。例えば、Cache-Control: max-age=3600 は、web ブラウザーに応答を 1 時間キャッシュするように指示します。Surrogate-Control の HTTP 応答ヘッダーも存在する場合、この値は CDN によって無視されます。
  • Surrogate-Control HTTP 応答ヘッダーは、AEM CDN に応答をキャッシュする期間を指示します。値は秒単位です。例えば、Surrogate-Control: max-age=3600 は、CDN に応答を 1 時間キャッシュするように指示します。
  • Expires HTTP 応答ヘッダーは、AEM CDN(および web ブラウザー)にキャッシュされた応答の有効期間を指示します。値は日付です。例えば、Expires: Sat, 16 Sept 2023 09:00:00 EST は、web ブラウザーに応答を指定された日時までキャッシュするように指示します。

キャッシュの有効期間がブラウザーと CDN の両方で同じである場合は、Cache-Control を使用してキャッシュの有効期間を制御します。Web ブラウザーが CDN とは異なる期間に応答をキャッシュする必要がある場合は、Surrogate-Control を使用します。

デフォルトのキャッシュの有効期間

HTTP 応答が上記の修飾子に従って AEM Dispatcher キャッシュの対象となる場合、カスタム設定が存在しない限り、以下がデフォルト値になります。

コンテンツタイプ デフォルトの CDN キャッシュの有効期間
HTML/JSON/XML 5 分
アセット(画像、ビデオ、ドキュメントなど) 10 分
永続クエリ(JSON) 2 時間
クライアントライブラリ(JS/CSS) 30 日
その他 キャッシュなし

キャッシュルールのカスタマイズ方法

CDN によるコンテンツのキャッシュ方法の設定は、HTTP 応答でのキャッシュヘッダーの設定に制限されます。これらのキャッシュヘッダーは通常、mod_headers を使用して AEM Dispatcher の vhost 設定で設定されますが、AEM パブリッシュ自体で実行されるカスタム Java™ コードで設定することもできます。

AEM Dispatcher

AEM パブリッシュの AEM Dispatcher

HTTP リクエスト/応答がキャッシュされるタイミング

次の条件がすべて満たされると、対応する HTTP リクエストに対する HTTP 応答がキャッシュされます。

  • HTTP リクエストメソッドが GET または HEAD

    • HEAD の HTTP リクエストは、HTTP 応答ヘッダーのみをキャッシュします。応答本体はありません。
  • HTTP 応答ステータスが 200

  • HTTP 応答がバイナリファイル用ではない。

  • HTTP リクエスト の URL パスが、拡張子(例:.html.json.css.js など)で終わる。

  • HTTP リクエストに認証が含まれておらず、AEM によって認証されない。

  • HTTP リクエストにクエリパラメーターが含まれていない。

    • ただし、無視されたクエリパラメーターを設定すると、無視されたクエリパラメーターを含む HTTP リクエストをキャッシュしたり、キャッシュから提供したりできるようになります。
  • HTTP リクエストのパスは、Dispatcher の許可ルールに一致しますが、拒否ルールには一致しません

  • HTTP 応答には、AEM パブリッシュによって設定された次の HTTP 応答ヘッダーが含まれていません。

    • no-cache
    • no-store
    • must-revalidate

キャッシュの内容

AEM Dispatcher は、以下をキャッシュします。

キャッシュの有効期間

AEM Dispatcher は、次の方法を使用して HTTP 応答をキャッシュします。

  • コンテンツの公開または非公開などのメカニズムを通じて無効化がトリガーされるまで。
  • 明示的に Dispatcher 設定で設定されている場合の TTL(有効期間)。enableTTL の設定を確認して、AEM プロジェクトアーキタイプのデフォルト設定を参照してください。

デフォルトのキャッシュの有効期間

HTTP 応答が上記の修飾子に従って AEM Dispatcher キャッシュの対象となる場合、カスタム設定が存在しない限り、以下がデフォルト値になります。

コンテンツタイプ デフォルトの CDN キャッシュの有効期間
HTML/JSON/XML 無効化まで
アセット(画像、ビデオ、ドキュメントなど) なし
永続クエリ(JSON) 1 分
クライアントライブラリ(JS/CSS) 30 日
その他 無効化まで

キャッシュルールのカスタマイズ方法

AEM Dispatcher のキャッシュは、以下を含む Dispatcher 設定を通じて設定できます。

  • キャッシュの内容
  • 公開/非公開でキャッシュが無効化される部分
  • キャッシュの評価時に無視される HTTP リクエストのクエリパラメーター
  • キャッシュされる HTTP 応答ヘッダー
  • TTL キャッシュの有効化または無効化
  • その他

mod_headers を使用してキャッシュヘッダーを設定すると、vhost 設定は Dispatcher のキャッシュ(TTL ベース)に影響しません。これらは、AEM Dispatcher が応答を処理した後に HTTP 応答に追加されるからです。HTTP 応答ヘッダーを通じて Dispatcher のキャッシュに影響を与えるには、適切な HTTP 応答ヘッダーを設定する AEM パブリッシュで実行されるカスタム Java™ コードが必要です。

このページ