页面右上角显示“登录”,迷你购物车是空的,但访问账户中心又确认用户 Session 存在。刷新几次后偶尔恢复,而且响应头一直是 Varnish HIT。
我用同一浏览器连续保存三类证据:HTML 文档请求、customer/section/load 请求、Cookie。结果是 HTML 可以公共缓存,客户姓名和购物车应由 private content 再加载;问题页面的 section/load 也被 CDN 缓存了。
快速判断
curl -sSI https://shop.example.com/
curl -sSI 'https://shop.example.com/customer/section/load/?sections=cart,customer'
- HTML HIT 不一定错;
- 带客户私有数据的 section 响应不应成为跨用户公共缓存;
X-Magento-VaryCookie 被代理删除,会让页面上下文失去区分;- 把所有 Cookie 都加入 cache key 又会把命中率打到很低。
最终修改的是 CDN 对 private-content 路径的缓存规则,并恢复必要 Cookie 的转发。没有通过“登录页面全部 bypass”粗暴规避,因为那会让大量可缓存 HTML 失去价值。
验收用三个无痕会话:游客、客户A、客户B。三者请求同一商品页可以共享公共 HTML,但 customer-data 必须分别返回自己的姓名和购物车;退出登录后本地 section 也要被正确失效。

