REST 查询缓存中的 Cache-Control

对于 REST 终结点,可以影响数据 API 生成器 (DAB) 如何通过请求标头使用其内部查询结果缓存 Cache-Control

重要

如果在运行时配置中禁用缓存,则忽略这些指令,查询会正常运行。

支持的 Cache-Control 值

价值 行为
no-cache 强制 DAB 绕过 L1 和 L2 缓存,从数据库提取新数据,并使用新结果更新缓存。
no-store 指示 DAB 根本不缓存响应(不存储在 L1 或 L2 中,也不会尝试从缓存中提取)。

行为

  • 指令匹配不区分大小写。
  • DAB 不解释其他标准 Cache-Control 指令,例如 max-age 或 max-stale。
  • 仅适用于 REST 查询作。 不用于 GraphQL 请求级缓存指令。
  • Cache-Control 请求 HTTP 标头值控制 L1 和 L2 缓存。

注释

DAB 不会为任何缓存作设置缓存控制响应标头。

指令:no-cache

强制重新读取并更新缓存层。

请求

GET /api/Books
Cache-Control: no-cache
Accept: application/json

响应(示例)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

效果:缓存现在保存此新结果(受配置的 TTL 的约束)。

指令:no-store

如果存在,则使用现有的缓存值;否则,请查询数据库,但不使用新结果填充缓存(或刷新)。

请求

GET /api/Books
Cache-Control: no-store
Accept: application/json

响应(示例)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

效果:如果尚未缓存此结果,则不会存储它。 如果早期请求未填充缓存,则以后 only-if-cached 的请求可能会失败。

Review

  • 需要强制从数据库刷新并更新缓存时使用 no-cache
  • 当需要数据但不希望此响应更改缓存时使用 no-store (尽管它可以读取现有的缓存值)。
  • 省略用于正常缓存行为的标头。