Quelles requêtes AEM le cache de Dispatcher ?

Cet article détermine pourquoi et quelles requêtes/réponses HTTP ne sont pas mises en cache par le Dispatcher AEM.

Description description

Environnement

AEM Dispatcher 4.3.3

Problème

La documentation couvre les scénarios les plus importants qui affectent la capacité de mise en cache des requêtes et réponses qui transitent par le module de Dispatcher AEM. Toutes les règles de cache ne sont pas traitées.

Résolution resolution

Règles de requête et de mise en cache HTTP

Pour qu’une requête HTTP puisse être mise en cache par le Dispatcher, elle doit respecter les règles suivantes :

  1. L’URL est absolue (ne fonctionne pas avec . ou …), a une extension de fichier et le nom de fichier dans l’URL fonctionne comme un fichier sur le système de fichiers.

    Messages de journal associés:

    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
    

    Exemples  :

    table 0-row-2 1-row-2
    /content/test not cached
    /content/test.html cached
  2. Il ne comporte aucune barre oblique après la première extension de fichier.

    Messages de journal associés:

    code language-none
    request URL has trailing slash
    

    Exemples  :

    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. Il utilise la méthode HTTP GET ou HEAD.

    Messages de journal associés:

    code language-none
    request method is neither GET nor HEAD
    

    Exemples  :

    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. La demande est refusée par /CACHE => /RULES définies dans le dispatcher. TOUTE CONFIGURATION DE FERME.

    Messages de journal associés:

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

    Exemples  :

    a. Non mis en cache

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

    b. Mise en cache

    code language-none
    Farm has /cache => /rules and a request is received for /content/test.html
    /cache
    {
      ...
      /rules
      {
        /0001 {
          type "allow"
          glob "*"
          }
      }
    }
    
  5. La requête HTTP ne contient pas d’en-tête d’autorisation ou elle contient l’en-tête , mais /ALLOWAUTHORIZED est défini sur 1 dans la CONFIGURATION DE LA FERME.

    Messages de journal associés:

    code language-none
    request contains authorization
    

    Exemples  :

    a. Non mis en cache

    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. Mise en cache

    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. La requête HTTP contient un cookie de connexion ou d’autorisation dans l’en-tête du cookie, ou elle contient (ou les deux) de ces cookies et /ALLOWAUTHORIZED est défini sur 1 dans la CONFIGURATION DE LA FERME.

    Messages de journal associés:

    code language-none
    request contains authorization
    

    Exemples  :

    a. Non mis en cache

    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. Mise en cache

    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. Il existe un paramètre QUERYSTRING dans l’URL et le paramètre peut être ignoré via la CONFIGURATION /IGNOREURLPARAMS DE LA FERME.

    Messages de journal associés:

    code language-none
    request contains a query string
    

    Exemples  :

    a. Mise en cache

    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. Non mis en cache

    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” }
    }
    

Règles de réponse et de mise en cache HTTP :

La réponse HTTP renvoyée par l’AEM peut être mise en cache si les critères suivants sont satisfaits :

  1. Dispatcher peut envoyer et recevoir une réponse 200 OK de l’un des "RENDERS" définis.

    Remarque : Si non /timeout est défini sur /renders ou est défini sur 0, il attend indéfiniment une connexion à l’instance AEM même si l’instance est hors service.

    Messages de journal associés:

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

    Exemples  :

    table 0-row-2 1-row-2
    Requête HTTP :

    200 OK
    mis en cache
    Requête HTTP :

    404 Page introuvable
    non mis en cache
  2. Aucun de ces en-têtes de réponse n’est présent dans la réponse :

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

    Messages de journal associés:

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

    Exemples  :

    table 0-row-2 1-row-2 2-row-2 3-row-2
    Réponse HTTP :

    200 OK

    Dispatcher : no-cache
    non mis en cache
    Réponse HTTP :

    200 OK

    Cache-control : no-cache
    non mis en cache
    Réponse HTTP :

    200 OK

    Pragma : no-cache
    non mis en cache
    Réponse HTTP :

    200 OK
    mis en cache
  3. La valeur de longueur du contenu est supérieure à zéro OCTETS.
    Messages de journal associés:

    code language-none
    response content length is zero
    

    Exemples  :

    table 0-row-2 1-row-2
    Réponse HTTP :

    200 OK

    Content-Length: 0
    non mis en cache
    Réponse HTTP :

    200 OK

    Content-Length : 3120
    mis en cache
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f