缓存Cache Control
Cache Control
Included in the “Power Extensions” bundle
使用 GET 方法向 GraphQL 服务器执行 Query 时,可以借助标准 HTTP 缓存,将 GraphQL 响应缓存在客户端或客户端与服务器之间的中间阶段(如 CDN)。
该功能对 persisted queries 天然有效,对于单一端点和自定义端点,则通过在端点后附加参数 ?query={ GraphQL query } 来实现。
说明
HTTP 缓存的工作原理是在响应中发送包含 max-age 值的 Cache-Control 头,指示响应应缓存多长时间。
Cache Control 扩展提供了 Cache Control List,可以为字段和指令定义自定义的 max-age 值。因此,包含不同字段和指令组合的不同 Query 将产生不同的 max-age 值。
响应的 max-age 值由 GraphQL 引擎自动计算。其值为请求 Query 中所有字段和指令的最低 max-age(如 Cache Control List 中所定义),但在以下任一情况下将返回 no-store:
- 执行了任何 mutation
- 任何字段或指令的
max-age值为0 - Access Control 规则需要针对任何字段或指令检查用户状态(此时响应特定于用户,无法缓存)

Cache Control List
网站将新增一个「Cache Control List」自定义文章类型。可以在菜单中的「Cache Control Lists」页面浏览其条目,点击「Add New Cache Control List」即可在编辑器中添加新条目。


每个 Cache Control List 包含一个或多个条目,每个条目由以下元素构成:
- 当这些字段和指令出现在 GraphQL Query 中时,所选的 max-age 即生效
- max-age

创建 Cache Control List 后,可以通过编辑对应的 Schema Configuration,在「Cache Control Lists」区块下从列表中选择该项,使端点使用它。
