参见这个探讨。
后端运行在多个 pods/ 节点时,当子序列申请过早进入时,后端将无奈跨集群发送缓存生效申请。此外,如果多个申请扩散在多个节点上,则会耗费提早和不必要的资源。
对于单个客户端,Spartacus 应该尽可能多地与单个后端交互。这在传统上称为“粘性会话”。
CCv2 为此做了局部筹备。它将 ROUTE cookie 增加到响应中。然而,此 cookie 不可配置且不应用 SameSite 策略。这意味着解耦的店面可能无奈应用它,因为它作用于不同的域。明天仿佛只有 chrome 有这个问题,但将来预计会有更多的浏览器呈现。
可怜的是,明天的 Spartacus 不应用 ROUTE cookie。Cookie 基本不会随任何申请一起发送。为了利用 ROUTE cookie,必须执行以下操作:
- 在 http 客户端中应用 withCredentials: true 选项,以便每次申请都发送 cookie
- 应用额定的 CORS 过滤器 (Allow-Origin-With-Credentials:true) 配置商务后端,以确保 cookie 通过过滤器。
为了确保 Spartacus(或更好:angular)将随申请发送 cookie,申请必须应用 withCredentials: true 选项实现。这能够在拦截器中实现,以便咱们以通用形式执行此操作并确保没有申请遗记这一点。
一旦前端这些加强到位,就会抛出谬误,因为必须实现额定的后端配置。必须增加一个新的配置属性 corsfilter.ycommercewebservices.allowCredentials = true。
SAP Spartacus 端具体加强形式:
首先在 occ-config.ts 里减少一个配置项:useWithCredentials
而后新建一个 interceptor,如果检测到配置里启用了 withCredentials 的选项,就对所有的 HTTP 申请进行拦挡,增加对应的 withCredentials 信息。
最初在 module 里注入这个 HTTP interceptor 实现:
测试方法
(1) 验证是否为第一个 OCC 申请检索了响应 cookie ROUTE
(2) 验证 ROUTE cookie 是否已增加到所有子序列申请中
测试后果:
当咱们第一次加载 SPA 时,咱们在第一次 occ 调用的响应中取得了 ROUTE cookie。
而后咱们在后续的 occ 申请中获取 ROUTE cookie。
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: