Shopware与Varnish环境下修改购物车数量时出现NS_BINDING_ABORTED问题求助
以下是可能导致该跨浏览器差异问题的根源:
浏览器请求中止与优先级逻辑差异
Firefox在发起checkout/line-item/change-quantity请求时,会主动中止未完成的/csrf/generate请求(NS_BINDING_ABORTED是Firefox专属的请求中止状态码),但Shopware后端接受了基于旧有效CSRF令牌的修改请求,因此操作成功。而Chrome/Edge的请求队列机制不同,当/csrf/generate请求完成返回新令牌后,后续的修改请求因页面状态变更(如DOM更新触发的请求取消)被中止,进而触发重新获取CSRF令牌+发起修改请求的循环。Varnish的会话与CSRF令牌缓存问题
Varnish可能未正确处理用户会话的隔离,导致CSRF令牌被跨会话缓存或复用:Chrome/Edge获取的新令牌与当前会话绑定不匹配,发起修改请求时因令牌验证失败被后端拒绝,请求中止后触发重新获取令牌的流程。而Firefox因为提前中止了CSRF请求,使用的旧令牌仍在会话有效期内,得以通过验证。此外,Varnish的POST请求超时或截断配置过短,也可能导致Chrome/Edge的修改请求被提前终止。AWS ALB的连接复用与转发差异
AWS ALB的HTTP/2多路复用机制在不同浏览器下表现不一致:Chrome/Edge倾向于复用同一条连接发送多个请求,导致CSRF令牌的会话上下文在ALB转发时出现混乱,修改请求使用的令牌与后端会话不匹配。而Firefox的连接复用策略不同,每个请求使用独立连接,避免了上下文混乱。另外,ALB的长连接超时设置可能导致Chrome/Edge的修改请求被连接重置,触发请求重试循环。Shopware的CSRF验证与前端逻辑问题
Shopware的CSRF令牌可能绑定了浏览器特定标识(如User-Agent),Chrome/Edge的标识与生成令牌时的标识存在细微差异,导致验证失败请求被中止。此外,前端修改购物车数量的逻辑可能存在时序问题:Chrome/Edge下/csrf/generate请求完成后,新令牌未及时注入到修改请求的参数中,导致请求使用无效令牌被拒绝,进而触发循环。
内容的提问来源于stack exchange,提问作者Zirc75

