Shopify Storefront API

Storefront 查询前面加 CDN 后购物车数量不更新

现象#

给 GraphQL 端点套了一层 CDN,商品页确实变快,但加购后角标一直显示 1,换个浏览器又是对的;cart 查询返回的 totalQuantity 明显是几分钟前的。

原因#

  • 查询全走 POST,CDN 默认不缓存,一旦手动缓存就会把带 cartId 的响应一起存下来
  • 缓存 key 只算了 URL,没有算请求体里的 cartId、国家和语言
  • 响应头被统一改成 public, max-age=300,购物车这类个性化数据也被公共缓存
  • 商品更新后没有主动 purge,PDP 一直吃旧对象

处理步骤#

  1. 在 CDN 规则里只缓存白名单查询,例如 products、collection,排除 cart 与 customer
  2. 把请求体哈希、@inContext 的国家语言与货币一起拼进 cache key
  3. 对购物车与顾客查询强制 Cache-Control: no-store,并补上 Vary 维度
  4. 商品或库存变更后按 handle 或 product id 主动 purge 对应 key
  5. 用响应头里的 age 与 x-cache 确认命中层级

验收标准#

加购后角标立即变化,cart 查询响应头为 no-store,PDP 在 purge 后首次请求 MISS、第二次 HIT。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。