AEM:クエリパラメーターの順序に一貫性がなく、ETagとキャッシュに影響する

この記事では、Asset Delivery APIまたはCore Image Componentによって生成された画像URL内のクエリパラメーターの非決定的な順序が、Adobe Experience Managerで不安定なETagsと非効率的なキャッシュにつながる方法について説明します。 問題を解決するための手順が示されます。

説明 description

環境

Adobe Experience Manager as a Cloud Service(すべてのバージョン)

問題/症状

  • HTML ページキャッシュの無効化と一貫性のないETag値が配信層で確認されます。
  • 一部のIf-None-Match リクエストでは、304 Not Modifiedではなく200 OKが返されるため、不要なダウンロードが発生し、キャッシュ効率が低下します。
  • アセット配信APIまたはコア画像コンポーネントによって生成される画像URLには、width、quality、preferwebpなどのクエリパラメーターが非決定的な順序で含まれます。 これにより、コンテンツが機能的に同じ場合でも、リテラル HTMLの応答本文がリクエスト間で変更されます。

一貫性のないパラメーター順序の例:

  • /adobe/dynamicmedia/deliver/path/to/image?width=1600&quality=85&preferwebp=true
  • /adobe/dynamicmedia/deliver/path/to/image?quality=85&preferwebp=true&width=1600

原因

クエリパラメーターの作成に使用されるHashMap、HashSet、Collectors.toMap()などの順序が設定されていないコレクションは、決定論的でない順序になります。 これにより、HTMLの出力がリクエストによって異なり、ETag ベースのキャッシュが切断されます。

解決策 resolution

問題を解決するには、次の手順に従います。

  1. 影響を受けるコンポーネントで画像URLを生成する役割を担うSling モデルまたはHTL コード(例:ホームページのヒーローまたはカルーセル)を特定します。

  2. クエリ パラメーターが、HashMap、HashSet、Collectors.toMap()などの順序のないコレクションを使用して組み立てられているかどうかを確認します。

  3. コードをリファクタリングして、決定論的パラメーターの順序を確保します。

    • TreeMapを使用してキーでパラメーターを並べ替え、一貫性のある順序を確保します。
    • 挿入順序を保持する必要がある場合は、LinkedHashMapを使用し、挿入順序がリクエスト間で一貫していることを確認します。
  4. 更新されたコンポーネントをデプロイします。

  5. 生成された画像URLがすべてのパブリッシュインスタンスとリクエストで一貫したクエリパラメーター順序を持っていることを確認します。

  6. 同じページのETagsがパブリッシュインスタンス間で同じであること、およびCDN/ブラウザーキャッシュが期待どおりに機能することを確認します。つまり、必要に応じて304 Not Modified応答が返されます。

関連トピックス

recommendation-more-help
experience-cloud-kcs-help-kbarticles