1. 概述

在本文中,我们将深入解析浏览器如何使用 Cookie 的 Domain 属性。Cookie 域是 Cookie 的一个属性,其值为域名。浏览器使用该域名来判断是否应该在当前 HTTP 请求中携带该 Cookie。我们将首先介绍 Cookie 的作用和基本格式,然后重点讲解浏览器如何根据 Domain 和 Path 等属性决定是否发送 Cookie。文中会结合多个实际示例,帮助你更好地理解 Cookie 的匹配规则。


HTTP 是一种无状态协议,这意味着服务器无法记住客户端的请求历史。但在实际应用中,服务器常常需要识别用户、维护会话状态,例如用户登录、购物车内容保存等。Cookie 就是为了解决这个问题而设计的机制

举个例子:当你第一次访问一个电商网站时,服务器可能会为你的浏览器分配一个唯一的 ID,比如 user1,并通过响应头中的 Set-Cookie 字段将这个 ID 发送给浏览器。浏览器将这个 ID 保存在本地(通常称为“Cookie Jar”),并在后续请求中将它发送给服务器,以此实现用户识别和状态保持。

一句话总结
Cookie 是服务器发送给浏览器的数据,用于在后续请求中标识用户身份或状态。


服务器通过响应头中的 Set-Cookie 字段发送 Cookie,其格式如下:

Set-Cookie: id="user1"; Expires=Mon, 16 Jan 2023 22:00:00 GMT; Max-Age=3600; Domain="thedomain.com"; Path="/example"; Secure; HttpOnly

Cookie 由多个键值对组成,用分号 ; 分隔。其中:

  • id="user1" 是必须的,表示 Cookie 的名称和值
  • 其他字段是可选的 Cookie 属性:
    • Expires:过期时间(GMT 格式)
    • Max-Age:存活时间(单位:秒)
    • Domain:域名,用于控制 Cookie 的作用范围
    • Path:路径,用于进一步限定 Cookie 的生效路径
    • Secure:仅在 HTTPS 下发送 Cookie
    • HttpOnly:防止 XSS 攻击,JavaScript 无法访问该 Cookie

浏览器在后续请求中,会将 Cookie 通过 Cookie 请求头发送回去:

Cookie: id="user1"

⚠️ 注意:一个响应可以包含多个 Set-Cookie 头,但每个 Cookie 名称必须唯一。


浏览器在发送请求前,会检查本地存储的 Cookie,并根据 DomainPath 属性判断是否应该发送该 Cookie。

3.1. 域名匹配规则

当浏览器收到 Set-Cookie 响应头时,如果指定了 Domain 属性,例如:

Set-Cookie: id="user1"; Domain="thedomain.com"

那么浏览器会将该 Cookie 的域名存储为 *.thedomain.com,表示该 Cookie 对 thedomain.com 及其所有子域都有效。

如果未指定 Domain 属性,则默认使用当前响应的域名,例如响应来自 thedomain.com/test,那么 Cookie 的 Domain 会被设置为 thedomain.com

规则总结

  • Domain="thedomain.com" → 匹配 thedomain.comwww.thedomain.coma.b.thedomain.com
  • 未指定 Domain → 仅匹配当前域名(不包括子域)

3.2. 路径匹配规则

Path 属性用于进一步限定 Cookie 的生效路径。

例如:

Set-Cookie: id="user1"; Path="/example"

表示该 Cookie 仅在 /example 路径及其子路径下才被发送,如 /example/test

如果未指定 Path,则默认使用当前请求的路径。

规则总结

  • Path="/example" → 匹配 /example/example/test
  • 未指定 Path → 仅匹配当前请求路径

3.3. 示例解析

示例 1

Set-Cookie: id="user1"

来自 URI:thedomain.com/index

✅ 会发送到:

  • thedomain.com/index
  • thedomain.com/index/subpath

❌ 不会发送到:

  • www.thedomain.com/index(因为未指定 Domain)

示例 2

Set-Cookie: id="user1"; Domain="thedomain.com"

来自 URI:thedomain.com/index

✅ 会发送到:

  • www.thedomain.com/index
  • a.b.thedomain.com/index
  • thedomain.com/index/lists

4. 隐私与安全问题

当访问 thedomain.com 页面时,页面中可能嵌入了来自 the-ads.com 的广告。此时浏览器会向 the-ads.com 发起请求,并接收其设置的 Cookie。这些 Cookie 被称为 第三方 Cookie

如果之后你访问了 anotherdomain.com,而该页面也嵌入了 the-ads.com 的广告,那么浏览器会将之前存储的 Cookie 发送给 the-ads.com。这使得广告商可以跨站点追踪用户行为。

⚠️ 踩坑提示:第三方 Cookie 是广告追踪和用户行为分析的常见手段,但同时也引发了隐私问题。

4.2. 浏览器设置与法规

目前主流浏览器都提供了隐私设置,允许用户禁用第三方 Cookie。此外,欧盟《通用数据保护条例》(GDPR)也要求网站在设置 Cookie 前必须获得用户同意。


5. 总结

本文我们详细讲解了 Cookie 的作用、格式以及浏览器如何根据 DomainPath 属性决定是否发送 Cookie。我们还通过多个示例演示了 Cookie 的匹配规则,并讨论了 Cookie 在隐私和安全方面的潜在问题。

掌握 Cookie 的 Domain 机制对于 Web 开发者来说至关重要,尤其在涉及跨域通信、单点登录、子域共享等场景时。希望本文能帮助你更深入地理解 Cookie 的底层逻辑,避免在实际开发中踩坑。


原始标题:Browser Cookie Domains