对于 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(尽管它可以读取现有的缓存值)。 - 省略用于正常缓存行为的标头。