页面主体已经打开,但右上角购物车一直转圈,Network 中 customer/section/load 连续返回 400。这个请求负责加载购物车、客户信息等私有内容,问题通常不在 minicart 模板,而在请求参数、会话 Cookie 或自定义 section 的返回值。

先保留一个失败请求。在 Network 里复制为 cURL,去掉真实会话值后记录请求路径、sections 参数、Store Cookie 和响应正文。400 的 JSON 消息比“前端转圈”更接近原因。

curl -sk 'https://shop.example.com/customer/section/load/?sections=cart&force_new_section_timestamp=false'  -H 'X-Requested-With: XMLHttpRequest'  -D /tmp/section.headers -o /tmp/section.json
cat /tmp/section.headers
head -c 1000 /tmp/section.json

只在特定页面失败:查 sections.xml

grep -Rni "<section name=" app/code/*/*/etc/frontend/sections.xml
grep -Rni "customerData.reload|customerData.invalidate" app/code app/design | head -n 80

自定义 action 若把所有 section 都标记为失效,每次点击都会触发大请求;section 名称写错,或 JS 请求服务端不存在的 section,也会失败。先把请求缩小到 sections=cart,若单独成功,再逐个加入其他 section。

所有页面都失败:对齐会话与 Cookie

  • 确认域名、HTTPS 和 Cookie Domain 没有在 www/非 www 间跳转;
  • 检查 PHPSESSID、private_content_version 是否被 CDN 缓存进公共响应;
  • 多节点环境确认 Session 使用共享存储;
  • 清测试域名站点数据可用于验证,但不能当成最终修复。
bin/magento config:show web/cookie/cookie_domain
bin/magento config:show web/secure/base_url
grep -n "session" app/etc/env.php

自定义 section 不应让整条请求崩溃

public function getSectionData(): array
{
 try {
  return ['value' => $this->service->getValue()];
 } catch (MagentoFrameworkExceptionLocalizedException $e) {
  return ['value' => null, 'available' => false];
 }
}

不要吞掉所有 Throwable;真正的代码错误应写日志并修复。完成时,首次加载只有预期的 section 请求,响应 200,重复刷新不形成循环,加入购物车后数量及时变化。