Storefront 查询前面加 CDN 后购物车数量不更新
现象#
给 GraphQL 端点套了一层 CDN,商品页确实变快,但加购后角标一直显示 1,换个浏览器又是对的;cart 查询返回的 totalQuantity 明显是几分钟前的。
原因#
- 查询全走 POST,CDN 默认不缓存,一旦手动缓存就会把带 cartId 的响应一起存下来
- 缓存 key 只算了 URL,没有算请求体里的 cartId、国家和语言
- 响应头被统一改成 public, max-age=300,购物车这类个性化数据也被公共缓存
- 商品更新后没有主动 purge,PDP 一直吃旧对象
处理步骤#
- 在 CDN 规则里只缓存白名单查询,例如
products、collection,排除cart与customer - 把请求体哈希、
@inContext的国家语言与货币一起拼进 cache key - 对购物车与顾客查询强制
Cache-Control: no-store,并补上 Vary 维度 - 商品或库存变更后按 handle 或 product id 主动 purge 对应 key
- 用响应头里的
age与x-cache确认命中层级
验收标准#
加购后角标立即变化,cart 查询响应头为 no-store,PDP 在 purge 后首次请求 MISS、第二次 HIT。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。