后端接口 set-cookie 时domain设置为.pab.com.cn和pab.com.cn有区别吗?

28 阅读2分钟

在后端 API 设置 Set-Cookie 时,domain=.pab.com.cndomain=pab.com.cn 存在关键区别,核心在于子域名是否能共享该 Cookie,以下是详细拆解:

一、核心规则(HTTP Cookie 标准)

Cookie 的 Domain 属性遵循 RFC 6265 规范,核心逻辑:

Domain 值生效范围子域名是否共享
domain=pab.com.cn精确匹配 pab.com.cn 主域名❌ 不共享
domain=.pab.com.cn匹配 pab.com.cn + 所有子域名(如 a.pab.com.cnb.c.pab.com.cn✅ 共享

二、具体差异详解

1. domain=pab.com.cn(无前置点)

  • 生效域名:仅 pab.com.cn 本身(主域名);
  • 子域名不生效:如 test.pab.com.cnapi.pab.com.cn 等子域名的请求/响应中,无法读取/携带 该 Cookie;
  • 浏览器兼容:部分浏览器(如 Chrome)会自动补全前置点,但这是“兼容行为”,并非标准,不可依赖。

2. domain=.pab.com.cn(有前置点)

  • 生效域名pab.com.cn 主域名 + 所有层级的子域名(如 a.pab.com.cnb.a.pab.com.cn);
  • 子域名共享:子域名的页面/接口可以正常读取、携带该 Cookie(前提是路径 Path 也匹配);
  • 标准行为:符合 RFC 6265 规范,所有现代浏览器均兼容。

三、补充注意事项

  1. 默认行为(未显式设置 Domain) 如果不设置 Domain,Cookie 的生效域为当前请求的域名(且不含子域名),等价于 domain=pab.com.cn,且浏览器会禁止手动添加前置点。

  2. 域名合法性限制

    • Domain 不能设置为顶级域名(如 .com.cn),浏览器会拒绝;
    • 不能设置为跨域(如 pab.com.cn 的 Cookie 不能设置 domain=other.com)。
  3. 实践建议

    • 如果需要主域名 + 子域名共享 Cookie(如单点登录、统一鉴权):必须设置 domain=.pab.com.cn
    • 如果仅需主域名独享 Cookie:设置 domain=pab.com.cn(或不设置,依赖默认行为);
    • 避免依赖浏览器的“自动补点”兼容行为,显式设置符合需求的 Domain 更可靠。

四、示例验证

假设后端返回:

# 场景1:domain=pab.com.cn
Set-Cookie: token=123; Domain=pab.com.cn; Path=/; HttpOnly

# 场景2:domain=.pab.com.cn
Set-Cookie: token=123; Domain=.pab.com.cn; Path=/; HttpOnly
  • 访问 https://pab.com.cn:两个场景都能读取 Cookie;
  • 访问 https://api.pab.com.cn:场景1 无 Cookie,场景2 有 Cookie。

总结:前置点 . 是“子域名共享”的关键标识,无点仅匹配主域名,有点匹配主域名+所有子域名。