AEM Dispatcher은 어떤 요청을 캐시합니까?

이 문서에서는 AEM Dispatcher에 의해 캐시되지 않는 HTTP 요청/응답의 이유와 대상을 결정합니다.

설명 description

환경

AEM Dispatcher 4.3.3

문제

이 설명서에서는 AEM Dispatcher 모듈을 통해 전달되는 요청 및 응답의 캐시 기능에 영향을 주는 가장 중요한 시나리오를 다룹니다. 모든 캐시 규칙은 다루지 않습니다.

해결 방법 resolution

HTTP 요청 및 캐싱 규칙

디스패처에서 HTTP 요청을 캐싱하려면 다음 규칙을 준수해야 합니다.

  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 => /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 요청에 인증 헤더가 포함되어 있지 않거나 헤더가 포함되어 있지만 팜 구성에서 /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 요청은 쿠키 헤더에 로그인 토큰 또는 인증 쿠키를 포함하거나, 이러한 쿠키 중 하나 또는 둘 다를 포함하며 FARM 구성에서 /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 매개 변수가 있으며 FARM의 /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" 중 하나에서 200 OK 응답을 보내고 받을 수 있습니다.

    참고: /renders에 /timeout이 설정되지 않았거나 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개
    캐시됨
    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: no-cache
    캐시되지 않음
    HTTP 응답:

    200 OK

    Cache-control: no-cache
    캐시되지 않음
    HTTP 응답:

    200 OK

    Pragma: no-cache
    캐시되지 않음
    HTTP 응답:

    200개
    캐시됨
  3. Content-length 값이 0바이트보다 큽니다.
    관련 로그 메시지:

    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