Chrome中第三方站点303重定向至第一方站点时请求头丢失部分Cookie
环境信息
Chrome浏览器版本: 126.0.6478.127 (Official Build) (arm64)
使用技术
- 客户端 - Html, React.js, Javascript
- 服务端 - GoLang
操作步骤
步骤1
用户进入第一方站点后,使用Javascript设置若干带有SameSite和Secure策略的Cookie,示例如下:
Cookie A = 'value 1' Cookie B = 'value 2' Cookie C = 'value 3'

步骤2
通过Microsoft/Google(第三方站点)完成OAuth登录以验证用户身份。
步骤3
身份验证完成后,从第三方站点重定向至第一方站点(状态码303),请求头中的referrer为第三方站点。此时Chrome浏览器未在请求头中设置全部Cookie(Cookie A、B、C),服务端读取时会随机丢失1-2个Cookie。
背景说明
Chrome已默认对1%的稳定版客户端及20%的Canary、Dev和Beta版客户端限制第三方Cookie
问题解答
第三方Cookie限制是否影响该流程?
不会。这个流程里的Cookie是第一方站点设置的,重定向回第一方站点时,请求属于第一方上下文(目标域名就是第一方站点)。第三方Cookie限制针对的是第三方站点向用户发送Cookie的场景,和当前流程无关。
可能的根因
- Cookie容量超限:Chrome对单域名下的Cookie总大小(约4KB)和数量上限(默认50个)有限制,如果你的Cookie总大小接近或超过阈值,浏览器会随机丢弃部分Cookie。
- SameSite策略配置不规范:虽然你提到设置了SameSite,但如果部分Cookie的SameSite被错误设为
Strict,跨站重定向时不会被携带;不过你是随机丢失,这个可能性较低,更可能是大小/数量问题。 - 浏览器存储异常:Chrome的Cookie存储可能因内存不足、存储文件损坏等临时异常,导致随机丢失Cookie。
- 服务端解析问题:GoLang的Cookie解析逻辑如果存在bug,比如对Cookie分隔符处理不当,会导致部分Cookie无法被正确读取,误以为是浏览器没发送。
可行的解决方案
- 合并Cookie:把多个小Cookie的内容打包成JSON,存在一个Cookie里,控制总大小不超过4KB,同时减少Cookie数量。
- 校验Cookie属性:确认所有Cookie的
SameSite设为Lax(回第一方场景足够),Secure属性在HTTPS环境下正确配置;如果不需要前端读取,可添加HttpOnly提升安全性。 - 排查浏览器问题:清除浏览器缓存和Cookie,重启后测试;换其他浏览器(如Firefox)复现,判断是否是Chrome特定版本的问题。
- 调试服务端读取逻辑:在GoLang服务中打印原始的
Cookie请求头(用r.Header.Get("Cookie")),对比解析后的结果,确认是浏览器没发还是服务端没读到。 - 改用Session:将状态存入服务端Session,仅在客户端存储一个Session ID Cookie,避免多Cookie丢失风险。
内容的提问来源于stack exchange,提问作者Jakpren
相关产品推荐
相关产品推荐

