Partitioned Cookie(CHIPS)在同iframe中二次请求未发送的问题
问题分析与解决方案
核心原因拆解
你的问题涉及两个关键浏览器机制:Chrome的CHIPS(Cookie Having Independent Partitioned State)分区规则,以及跨域fetch请求的凭证处理逻辑。
1. CHIPS分区的绑定逻辑
当bot.com的iframe(第三方站点)向auth.com发送请求时,Chrome会将auth.com设置的SameSite=None Cookie自动分区到顶级站点site1.com——这是Chrome 115版本后默认的第三方Cookie分区行为。这个分区意味着:只有当请求发起上下文的顶级站点是site1.com时,该Cookie才会被允许发送。
但第二个请求来自同一个iframe却未携带Cookie,问题出在第二个关键因素:
2. 跨域fetch请求的凭证设置
跨域fetch请求的默认行为是credentials: "same-origin",即仅在同源请求中携带Cookie。对于bot.com到auth.com的跨域请求,即使Cookie存在且符合CHIPS分区规则,如果没有显式指定credentials: "include",浏览器不会自动发送Cookie。
你可能在第一个/login请求中(比如POST场景)隐式或显式配置了凭证,但第二个/auth请求遗漏了该设置,导致Cookie未被携带。
验证与修复步骤
- 检查并修正fetch请求的credentials参数:确保第二个请求显式添加
credentials: "include",示例代码如下:// 正确携带Cookie的跨域fetch请求 fetch('https://auth.com/auth', { credentials: 'include', // 其他必要配置:method、headers等 }); - 确认Cookie分区状态:在Chrome调试器的
Application > Cookies > auth.com中,查看该Cookie的Partitioned列是否标记为site1.com。如果是,说明分区正常,此时只要请求符合顶级站点上下文+credentials配置,Cookie就会被发送。 - 额外校验项:确保
auth.com和bot.com均使用HTTPS(Secure属性要求Cookie仅在HTTPS环境传输),且iframe未被设置限制跨域凭证的sandbox属性(比如未添加allow-same-origin等必要权限)。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

