Related Website Sets(RWS)是Chrome 109起引入的浏览器级机制,用于声明一组逻辑关联网站(如example.com及其子域),使其在第三方Cookie、存储分区等场景中被视作同一实体;它不依赖HTML,须通过HTTPS根路径响应头(Origin-Agent-Cluster和Related-Sites)或PWA manifest.json声明,且所有成员需双向验证一致。

什么是 Related Website Sets(RWS)?
Related Website Sets 是 Chrome 从 109 版本起引入的机制,用于向浏览器声明一组逻辑上关联的网站(比如 example.com、app.example.com、blog.example.com),让它们在第三方 Cookie、存储分区(Storage Partitioning)、Cookie SameSite 默认行为等方面被“视作同一实体”。它不是 HTML 标签或前端 JS API,不能靠写 HTML 实现——必须通过 HTTP 响应头或 manifest.json(仅限 PWA)声明。
如何正确声明 RWS:HTTP 响应头方式
这是目前最通用、最可靠的方式,适用于所有托管环境(Nginx、Apache、Cloudflare Workers、Vercel 等)。核心是返回 Origin-Agent-Cluster 和 Related-Sites 响应头。
-
Origin-Agent-Cluster: ?1表示该源启用隔离集群(推荐始终开启) -
Related-Sites必须是 JSON 数组,每个元素为带id的对象,id是完整 origin(协议 + 域名 + 端口)
例如,为 <a href="https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635">https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635</a> 关联 <a href="https://www.php.cn/link/c5e212421256cf0dcf335940944bc162">https://www.php.cn/link/c5e212421256cf0dcf335940944bc162</a> 和 <a href="https://www.php.cn/link/710ba53b0d353329706ee1bedf4b9b39">https://www.php.cn/link/710ba53b0d353329706ee1bedf4b9b39</a>,需在所有三个域名的响应中都设置:
Origin-Agent-Cluster: ?1
Related-Sites: [{"id":"https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635"},{"id":"https://www.php.cn/link/c5e212421256cf0dcf335940944bc162"},{"id":"https://www.php.cn/link/710ba53b0d353329706ee1bedf4b9b39"}]
注意:
立即学习“前端免费学习笔记(深入)”;
- 所有 origin 必须使用 HTTPS(
http://不被接受) - 每个 origin 必须能通过 HTTPS 访问并返回相同头(不能只在主站设,子站漏掉)
-
Related-Sites内容必须完全一致(顺序无关,但字符串需逐字相同)
为什么加了 Related-Sites 却没生效?
常见失效原因不是代码写错,而是部署或协议细节不满足:
- 响应头未在根路径(
/)返回:Chrome 只读取根路径的响应头来建立 RWS,子路径(如/foo/)返回无效 - 使用了重定向(301/302):Chrome 不会跟随跳转去读目标页的头,必须在最终响应的根路径直接返回
- CDN 或反向代理未透传头:Nginx 默认不转发自定义头,需显式配置
add_header并确保未被覆盖 - 浏览器缓存了旧响应:用无痕窗口测试,或检查 Network 面板中
index.html的响应头是否真实包含Related-Sites - 某个关联域名证书错误 / 无法访问:Chrome 会在后台验证全部 origin 是否可连通且响应合法,任一失败即整个 RWS 被忽略
PWA 场景下用 manifest.json 声明 RWS
仅当你的站点是渐进式 Web App(PWA),且已注册 Service Worker 并通过 manifest.json 安装为 PWA 时才适用。需在 manifest 文件中添加 related_applications 字段(注意:这不是标准字段,Chrome 当前实际识别的是 related_websites):
{
"name": "My App",
"start_url": "/",
"display": "standalone",
"related_websites": [
"https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635",
"https://www.php.cn/link/c5e212421256cf0dcf335940944bc162",
"https://www.php.cn/link/710ba53b0d353329706ee1bedf4b9b39"
]
}
但要注意:
- 此方式仅影响 PWA 安装后的上下文,对普通网页标签页无效
-
related_websites是字符串数组(不是对象数组),且不支持端口或路径 - 必须在
manifest.json的顶层,且该文件必须由主 origin 提供(不能跨域加载) - 目前兼容性弱于 HTTP 头方式,建议仅作为补充
RWS 的实际效果依赖浏览器持续验证,不是设完就永久生效;某个关联站点长期不可达或头不一致,Chrome 会静默退出该集合。


















