了解 AEM Dispatcher 缓存的请求

环境

AEM Dispatcher 4.3.3

问题

AEM Dispatcher 缓存哪些 HTTP 请求和响应?

答案

本文档介绍了一些最重要的场景,这些场景会影响 AEM Dispatcher 模块缓存请求和响应的能力。不包含所有的缓存规则。

HTTP 请求和缓存规则:

若要由 AEM Dispatcher 缓存 HTTP 请求,则须遵守以下规则。

1. 绝对 URL(即,不以“.”或“..”开头),具有文件扩展名,且 URL 中的文件名可用作文件系统中的文件。

相关日志消息如下所示:

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

示例:

/content/test

未缓存

/content/test.html

已缓存

2. 第一个文件扩展名后没有斜杠。

相关日志消息如下所示:

request URL has trailing slash

示例:

/content/test.html/

未缓存

/content/test.html/foo.jpg

未缓存

/content/test.html

已缓存

3. 使用 HTTP GET 或 HEAD 方法。

相关日志消息如下所示:

request method is neither GET nor HEAD

示例:

HEAD /content/test.html HTTP/1.1

已缓存

GET /content/dam/test.jpg HTTP/1.1

未缓存

POST /content/test.html HTTP/1.1

未缓存

4. AEM Dispatcher .any 场配置中定义的 /cache => /rules 属性会拒绝该请求。

相关日志消息如下所示:

URI not in cache rules: %s
request URL not in cache rules

示例:

场具有 /cache => /rules 属性,并且收到了 /content/test.html 的请求

/cache

{

  ...

  /rules

  {

    /0001 {

      type "deny"

      glob "*"

  }

}

未缓存

场具有 /cache => /rules 属性,并且收到了 /content/test.html 的请求

/cache

{

  ...

  /rules

  {

    /0001 {

      type "allow"

      glob "*"

  }

}

已缓存

5. HTTP 请求不包含 Authorization 标头;或者,虽然包含该标头,但在场配置中将 /allowAuthorized 设置为 1。

相关日志消息如下所示:

request contains authorization

示例:

HTTP 请求:

GET /content/test.html HTTP/1.1
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

dispatcher.any 场 /cache => /allowAuthorized 配置:

/cache {
  /allowAuthorized "0"
}

未缓存

HTTP 请求:

GET /content/test.html HTTP/1.1
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

dispatcher.any 场 /cache => /allowAuthorized 配置:

/cache {
  /allowAuthorized "1"
}

已缓存

6. HTTP 请求在 Cookie 标头中包含 login-token Cookie 或authorization Cookie;或者,它包含上述任一(或两个)Cookie,并且在场配置中将 /allowAuthorized 设置为 1。

相关日志消息如下所示:

request contains authorization

示例:

相关日志消息如下:

示例:

HTTP 请求:

GET /content/test.html HTTP/1.1
Cookie: login-token=...

dispatcher.any 场 /cache => /allowAuthorized 配置:

/cache {
  /allowAuthorized "0"
}

未缓存

HTTP 请求:

GET /content/test.html HTTP/1.1
Cookie: authorization=YWxhZGRpbjpvcGVuc2VzYW1l

dispatcher.any 场 /cache => /allowAuthorized 配置:

/cache {
  /allowAuthorized "0"
}

未缓存

HTTP 请求:

GET /content/test.html HTTP/1.1
Cookie: login-token=...

dispatcher.any 场 /cache => /allowAuthorized 配置:

/cache {
  /allowAuthorized "1"
}

已缓存

7. URL 中存在查询字符串参数,但是允许通过场的 /ignoreUrlParams 配置忽略该参数。

相关日志消息如下所示:

request contains a query string

示例:

HTTP 请求:

GET /content/test.html?test=1 HTTP/1.1

场 /cache 配置:

/ignoreUrlParams {
   /0001 { /type "allow" /glob "*" } 
}

已缓存

HTTP 请求:

GET /content/test.html?test=1 HTTP/1.1

场 /cache 配置:

/ignoreUrlParams {
   /0001 { /type "deny" /glob "*" } 
   /0001 { /type "allow" /glob "test" }
}

已缓存

HTTP 请求:

GET /content/test.html?test=1 HTTP/1.1

dispatcher.any 场 /cache => /allowAuthorized 配置:

/ignoreUrlParams {
   /0001 { /type "deny" /glob "*" } 
   /0001 { /type "allow" /glob "q" }
}

未缓存

HTTP 响应和缓存规则:

如果满足以下条件,则可以缓存从 AEM 返回的 HTTP 响应。

1. AEM Dispatcher 能够发送和接收来自已定义“renders”的“200 OK”响应状态。

注意:

如果 /renders 上未设置 /timeout,或将它设置为 0,那么它将永远等待与 AEM 实例的连接,即使该实例已关闭。

相关日志消息如下所示:

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

示例:

HTTP 请求:

200 OK

已缓存

HTTP 请求:

404 找不到页面

未缓存

2. 响应中不存在以下任何响应标头:

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

相关日志消息如下:

Backend forbids caching: %s, sent: %s"
response contains no_cache

示例:

HTTP 响应:

200 OK
Dispatcher: no-cache

未缓存

HTTP 响应:

200 OK
Cache-control: no-cache

未缓存

HTTP 响应:

200 OK
Pragma: no-cache

未缓存

HTTP 响应:

200 OK

已缓存

3. Content-Length 值大于 0 字节。

相关日志消息如下:

response content length is zero

示例:

HTTP 响应:

200 OK
Content-Length: 0

未缓存

HTTP 响应:

200 OK
Content-Length: 3120

已缓存

Adobe 徽标

登录到您的帐户