type
status
date
slug
summary
tags
category
icon
password
🌐 什么是 Public Suffix List(公共后缀列表)?
Public Suffix List(简称 PLS) 是一个由 Mozilla 维护的、开放的、社区协作的列表,用来定义哪些域名后缀被认为是**“公共后缀”**。
公共后缀指的是可以被多个不同组织或用户注册为下一级域名的部分,比如:
示例域名 | 公共后缀 | 注册者可以注册的部分 |
example.com | .com | example |
example.co.uk | .co.uk | example |
example.city.kawasaki.jp | city.kawasaki.jp | example |
foo.appspot.com | appspot.com | foo |
这些公共后缀不止是顶级域名(像
.com
),还可能是二级、三级甚至四级域名。❓ 为什么需要 Public Suffix List?
如果没有这个列表,浏览器和服务就会简单地以“最后一个点分割的部分”为顶级域(TLD)来判断域名所有权,但这种方式容易出错:
- 安全性问题(如 Cookie 隔离)
如果浏览器不知道
.co.uk
是公共后缀,那它可能允许 example.co.uk
和 another.co.uk
共享 Cookie,这是不安全的。- 浏览器的隐私和隔离策略
- Cookie 作用域控制
- CORS(跨域资源共享)
- Service Workers 作用域
- localStorage 隔离
PLS 帮助浏览器决定哪些域名属于同一“注册者”,从而用于:
- 浏览器地址栏显示
为了让用户更容易识别主域名,浏览器用 PLS 来突出主域,例如在输入
www.example.co.uk
时,高亮 example.co.uk
。🔧 举个例子:Cookie 的作用域
假设你想设置一个 Cookie:
⚠️ 这是不允许的,因为
co.uk
是公共后缀,不能被某个网站注册者独占。相反,
Set-Cookie: session=abc123; Domain=example.co.uk
是被允许的。浏览器会用 PLS 来判断这个合法性。
📄 Public Suffix List 的格式
该列表是一个文本文件,由规则组成:
解释:
com
是普通的 TLD。
co.uk
是一个多级公共后缀。
.bd
表示something.bd
都是公共后缀。
!city.kawasaki.jp
表示这是个例外项,city.kawasaki.jp
是私人域,不算公共后缀。
🔍 你可以在哪里查看或使用 PLS?
- 官方地址(TXT 格式):
- 使用库(多种语言支持):
- Node.js:
psl
- Python:
publicsuffix2
- Go:
golang.org/x/net/publicsuffix
🧠 总结
优点/作用 | 描述 |
安全 | 避免 Cookie 被滥用 |
隐私隔离 | localStorage、ServiceWorker 隔离 |
浏览器显示 | 正确标识主域名 |
兼容复杂域名体系 | 支持像 co.uk 、appspot.com 这类多级公共后缀 |