Chrome安全策略为何阻止同域子站的第一方Cookie?
核心问题分析
你遇到的情况本质是跨源请求的Cookie携带规则和浏览器安全策略的冲突:虽然app.domain.com和api.domain.com同属根域,但它们属于不同的源(子域名不同),浏览器默认不会在跨源请求中携带Cookie,即使Cookie配置了共享Domain。而禁用web安全模式下浏览器跳过了这些检查,所以Cookie能正常工作。
具体修复步骤
1. 为fetch请求添加credentials: 'include'
fetch API默认的credentials值是same-origin,仅允许同源(协议、域名、端口完全一致)请求携带Cookie。由于你的前端和后端是不同子域名,必须显式开启跨源Cookie携带:
// 修改你的fetch请求配置 fetch('https://api.domain.com/your-api-path', { method: 'POST', // 或其他请求方法 credentials: 'include', // 关键配置:允许跨源携带Cookie headers: { 'Content-Type': 'application/json', // 其他请求头 }, body: JSON.stringify(yourRequestData) })
2. 调整Cookie的Domain属性格式
现代浏览器(包括Chrome 80+)推荐直接使用不带前置点的根域名配置Domain,效果与.domain.com一致,但能避免一些潜在的兼容性问题:
Set-Cookie: cookieName=value; Path=/; Secure; HttpOnly; Domain=domain.com; SameSite=None
3. 确认HTTPS证书有效性
确保app和api的HTTPS证书是受浏览器信任的正规证书(不要用自签名证书在生产环境),Chrome会拒绝为不安全的HTTPS站点存储或携带Secure标记的Cookie。
4. 验证Cookie设置的交互触发条件
Chrome对无用户交互(比如页面自动加载时的请求)设置的Cookie有严格限制,确保Cookie是在用户主动操作(如点击登录按钮)的请求响应中设置的。
额外排查点
- 检查Chrome隐私设置:进入「设置>隐私和安全>Cookie及其他网站数据」,确认未开启「阻止第三方Cookie」,或为domain.com添加例外。
- 测试Firefox的隐私设置:Firefox的「增强跟踪保护」可能会拦截同根域但不同子域的Cookie,可临时关闭测试。
内容的提问来源于stack exchange,提问作者John Cover
相关产品推荐
相关产品推荐

