在后端 API 设置 Set-Cookie 时,domain=.pab.com.cn 和 domain=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.cn、b.c.pab.com.cn) | ✅ 共享 |
二、具体差异详解
1. domain=pab.com.cn(无前置点)
- 生效域名:仅
pab.com.cn本身(主域名); - 子域名不生效:如
test.pab.com.cn、api.pab.com.cn等子域名的请求/响应中,无法读取/携带 该 Cookie; - 浏览器兼容:部分浏览器(如 Chrome)会自动补全前置点,但这是“兼容行为”,并非标准,不可依赖。
2. domain=.pab.com.cn(有前置点)
- 生效域名:
pab.com.cn主域名 + 所有层级的子域名(如a.pab.com.cn、b.a.pab.com.cn); - 子域名共享:子域名的页面/接口可以正常读取、携带该 Cookie(前提是路径
Path也匹配); - 标准行为:符合 RFC 6265 规范,所有现代浏览器均兼容。
三、补充注意事项
-
默认行为(未显式设置 Domain) 如果不设置
Domain,Cookie 的生效域为当前请求的域名(且不含子域名),等价于domain=pab.com.cn,且浏览器会禁止手动添加前置点。 -
域名合法性限制
Domain不能设置为顶级域名(如.com.cn),浏览器会拒绝;- 不能设置为跨域(如
pab.com.cn的 Cookie 不能设置domain=other.com)。
-
实践建议
- 如果需要主域名 + 子域名共享 Cookie(如单点登录、统一鉴权):必须设置
domain=.pab.com.cn; - 如果仅需主域名独享 Cookie:设置
domain=pab.com.cn(或不设置,依赖默认行为); - 避免依赖浏览器的“自动补点”兼容行为,显式设置符合需求的
Domain更可靠。
- 如果需要主域名 + 子域名共享 Cookie(如单点登录、统一鉴权):必须设置
四、示例验证
假设后端返回:
# 场景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。
总结:前置点 . 是“子域名共享”的关键标识,无点仅匹配主域名,有点匹配主域名+所有子域名。