缓存
缓存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 Lists
Cache Control Lists

Cache Control List 编辑器

每个 Cache Control List 包含一个或多个条目,每个条目由以下元素构成:

  • 当这些字段和指令出现在 GraphQL Query 中时,所选的 max-age 即生效
  • max-age

Cache Control 条目

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

在 Schema Configuration 中选择 Cache Control List