AEM Dispatcher がキャッシュするのは、どのリクエストですか?

この記事では、AEM Dispatcher でキャッシュされない HTTP リクエストや応答の理由と対象を特定します。

説明 description

環境

AEM Dispatcher 4.3.3

問題

このドキュメントでは、AEM Dispatcher モジュールを使用するリクエストおよび応答のキャッシュ機能に影響を与える最も重要なシナリオについて説明します。 すべてのキャッシュルールが対象になるわけではありません。

解決策 resolution

HTTP リクエストルールとキャッシュルール

HTTP リクエストを Dispatcher でキャッシュできるようにするには、次のルールに従う必要があります。

  1. URL は絶対パスです(と連携していません)。 または…)の場合はファイル拡張子が付き、URL 内のファイル名はファイルシステム上のファイルとして機能します。

    関連するログメッセージ:

    code language-none
    URI not canonical: %s.
    
    Unable to map URI to file: %s.
    
    cache file path too long
    
    temporary file path too long
    
    request URL has no extension
    

    :

    table 0-row-2 1-row-2
    /content/test not cached
    /content/test.html cached
  2. 最初のファイル拡張子の後にスラッシュはありません。

    関連するログメッセージ:

    code language-none
    request URL has trailing slash
    

    :

    table 0-row-2 1-row-2 2-row-2
    /content/test.html/ not cached
    /content/test.html/foo.jpg not cached
    /content/test.html cached
  3. HTTP GETまたはHEAD方式を使用します。

    関連するログメッセージ:

    code language-none
    request method is neither GET nor HEAD
    

    :

    table 0-row-2 1-row-2 2-row-2
    HEAD /content/test.html HTTP/1.1 cached
    GET /content/dam/test.jpg HTTP/1.1 not cached
    POST /content/test.html HTTP/1.1 not cached
  4. リクエストは/CACHE によって拒否されました=> Dispatcher で定義された/RULES。 任意のファーム設定。

    関連するログメッセージ:

    code language-none
    URI not  in cache rules: %s request URL not in cache rules
    

    :

    a. キャッシュされていない

    code language-none
    Farm has /cache => /rules and a request is received for /content/test.html
    /cache
    {
      ...
      /rules
      {
        /0001 {
          type "deny"
          glob "*"
          }
      }
    }
    

    b. キャッシュ

    code language-none
    Farm has /cache => /rules and a request is received for /content/test.html
    /cache
    {
      ...
      /rules
      {
        /0001 {
          type "allow"
          glob "*"
          }
      }
    }
    
  5. HTTP リクエストに authorization ヘッダーが含まれていないか、ヘッダーが含まれていますが、ファーム構成で/ALLOWAUTHORIZED が 1 に設定されています。

    関連するログメッセージ:

    code language-none
    request contains authorization
    

    :

    a. キャッシュされていない

    code language-none
    HTTP Request:
    
    GET /content/test.html HTTP/1.1
    Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
    dispatcher.any farm /cache => /allowAuthorized configuration:
    /cache {
     /allowAuthorized “0”
    }
    

    b. キャッシュ

    code language-none
    HTTP Request:
    
    GET /content/test.html HTTP/1.1
    Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
    dispatcher.any farm /cache => /allowAuthorized configuration:
    /cache {
     /allowAuthorized “1”
    }
    
  6. HTTP リクエストの cookie ヘッダーに login-token または authorization cookie が含まれているか、これらの cookie のいずれか(または両方)が含まれており、ファーム設定で/ALLOWAUTHORIZED が 1 に設定されています。

    関連するログメッセージ:

    code language-none
    request contains authorization
    

    :

    a. キャッシュされていない

    code language-none
    HTTP Request:
    
    GET /content/test.html HTTP/1.1
    Cookie: login-token=...
    dispatcher.any farm /cache = /allowAuthorized configuration:
    /cache {
     /allowAuthorized “0”
    }
    
    code language-none
    HTTP Request:
    
    GET /content/test.html HTTP/1.1
    Cookie: authorization= YWxhZGRpbjpvcGVuc2VzYW1l
    dispatcher.any farm /cache = /allowAuthorized configuration:
    /cache {
     /allowAuthorized “0”
    }
    

    b. キャッシュ

    code language-none
    HTTP Request:
    
    GET /content/test.html HTTP/1.1
    Cookie: login-token=...
    dispatcher.any farm /cache => /allowAuthorized configuration:
    /cache {
     /allowAuthorized “1”
    }
    
  7. URL に QUERYSTRING パラメーターがあり、ファームの/IGNOREURLPARAMS 設定を介してパラメーターを無視できます。

    関連するログメッセージ:

    code language-none
    request contains a query string
    

    :

    a. キャッシュ

    code language-none
    HTTP Request:
    
    GET /content/test.html?test=1 HTTP/1.1
    Farm /cache configuration:
    
    /ignoreUrlParams {
        /0001 { /type “allow” /glob “*” }
    }
    
    code language-none
    HTTP Request:
    
    GET /content/test.html?test=1 HTTP/1.1
    Farm /cache configuration:
    /ignoreUrlParams {
        /0001 { /type “deny” /glob “*” }
        /0001 { /type “allow” /glob “test” }
    }
    

    b. キャッシュされていない

    code language-none
    HTTP Request:
    
    GET /content/test.html?test=1 HTTP/1.1
    dispatcher.any farm /cache = /allowAuthorized configuration:
    /ignoreUrlParams {
        /0001 { /type “deny” /glob “*” }
        /0001 { /type “allow” /glob “q” }
    }
    

HTTP 応答およびキャッシュルール:

次の条件を満たす場合、AEMから返される HTTP レスポンスはキャッシュ可能です。

  1. Dispatcher は、定義された「RENDERS」の 1 つから 200 OK 応答を送受信できます。

    注意: ない場合 /timeout が/renders に設定されているか、0 に設定されている場合、インスタンスがダウンしていても、AEM インスタンスへの接続が永遠に待機することになります。

    関連するログメッセージ:

    code language-none
    Unable to send request to remote server. Unable to receive response from remote server. Remote server returned: %s No backend available.
    

    :

    table 0-row-2 1-row-2
    HTTP リクエスト:

    200 OK
    キャッシュ
    HTTP リクエスト:

    404 ページが見つかりません
    キャッシュなし
  2. 応答には、これらの応答ヘッダーは存在しません。

    • Dispatcher: no-cache
    • Cache-control: no-cache
    • Pragma: no-cache

    関連するログメッセージ:

    code language-none
    Backend forbids caching: %s, sent: %s" response contains no_cache
    

    :

    table 0-row-2 1-row-2 2-row-2 3-row-2
    HTTP 応答:

    200 OK

    Dispatcher:キャッシュなし
    キャッシュなし
    HTTP 応答:

    200 OK

    キャッシュコントロール : キャッシュなし
    キャッシュなし
    HTTP 応答:

    200 OK

    プラグマ:キャッシュなし
    キャッシュなし
    HTTP 応答:

    200 OK
    キャッシュ
  3. Content-length の値が ZERO バイトより大きい。
    関連するログメッセージ:

    code language-none
    response content length is zero
    

    :

    table 0-row-2 1-row-2
    HTTP 応答:

    200 OK

    Content-Length: 0
    キャッシュなし
    HTTP 応答:

    200 OK

    Content-Length: 3120
    キャッシュ
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f