后台一个域、前端一个域、预览又一个域,浏览器认不认它们是同一个站

后台一个域、前端一个域、预览又一个域,浏览器认不认它们是同一个站
张文保 29 分钟阅读 2,876 阅读
本文目录
  1. 浏览器凭什么认定两个域名属于同一个站?
  2. 为什么不能靠数点号来切
  3. 这一条边界同时决定了多少件事
  4. 那份决定边界的清单,到底是个什么东西?
  5. 两个段落,两种性质
  6. 全世界只有8条例外规则
  7. PRIVATE段里,谁在认真对待这件事
  8. 同样是Headless CMS,为什么有的把客户隔开、有的没有?
  9. 按行业分档,差距大得离谱
  10. 三组把差异摆到明面上的对照
  11. 这里有个坑,我自己先掉进去了
  12. 我在真实浏览器里做了一次跨租户实验,结果如何?
  13. 实验怎么设计的
  14. A组值得单独说:它不止是“读得到”
  15. 平台自己在这条共享边界上放了什么?
  16. 五年有效期的跨租户标识
  17. 这就是它难改的原因
  18. 你浏览器里的那份清单,其实停在四个月前?
  19. 怎么测一份看不见的快照
  20. 分界线卡得异常干净
  21. 升级浏览器不等于更新清单
  22. 想让自己的域名进这份清单,要排多久?
  23. 门槛比想象中高
  24. 队列有多长
  25. 两段延迟是要叠加的
  26. 边界被改动的那一刻,会发生什么?
  27. 加进去:原本能跨的突然跨不了
  28. 移出来:原本隔开的突然并成一家
  29. 换成Headless这套架构,边界具体卡在哪几处?
  30. 八个具体的落点
  31. SEO这一侧也别漏
  32. 上线之前,怎么把这件事一次定死?
  33. 三条一分钟就能查完的
  34. 域名规划的两条原则
  35. 三件别做的事
  36. 常见问题解答
  37. 我用的托管平台不在清单里,是不是必须立刻换掉?
  38. 我自己的公司域名需要去申请加入PSL吗?
  39. 预览域和正式域不同站,除了重新登录还有别的后果吗?
  40. 怎么快速判断一个域名的eTLD+1到底是什么?
  41. 浏览器快照滞后4个月,这个数字会一直是4个月吗?
  42. 已经在共享边界上跑了一段时间,怎么收拾?
  43. 权威参考资料

摘要:浏览器判断两个域名算不算同一个站,靠的不是你的域名注册商,也不是DNS,而是一份放在代码托管平台上、由志愿者审合并请求的纯文本文件。这次把这份文件的10239条规则全量拆开数了一遍,又用真实浏览器实测了45个托管平台的边界判定。最刺眼的一组结果是:在某个知名博客平台的一个租户站上写下的Cookie,换到另一个毫不相干的租户站,16个请求原封不动把它带了过去。而更麻烦的一层在后面——你浏览器里装的那份清单,实测停在四个月前。

这事的起点是一次很普通的排查。

一个客户把内容后台迁到了Headless架构上,前端部署在托管平台的二级域下,内容后台在另一个平台的二级域下,中间还有一个给编辑用的预览环境。上线三周,编辑那边反复投诉:预览环境每天要重新登录好几次,而正式站的登录态好好的。开发查了会话超时、查了负载均衡的粘性、查了时钟偏移,一无所获。

最后定位到的原因,说穿了只有一句话:预览域所在的那个托管平台,浏览器不认为它的两个客户之间需要隔离,也不认为同一个客户的两个子域属于同一个站——因为这家平台压根没在那份清单上登记过。

清单的名字叫公共后缀列表,英文是Public Suffix List,圈子里习惯叫它PSL。它决定的东西比大多数人以为的多得多:Cookie能写到哪一层、跨站请求算不算跨站、缓存怎么分区、隐私隔离按什么单位切。上一篇拆SameSite在支付回跳时怎么把会话弄丢,讲的是跨过边界之后会发生什么;这一篇往上游走一层,讲边界本身是谁划的。

下面的数字全是这两天现拉现测的:PSL原文的全量统计、45个平台域的逐个核查、真实Chrome与Chromium双版本的跨租户实验,以及一次专门设计的快照比对。有两个结果和保哥事先的判断相反,其中一个直接推翻了原本准备写进去的建议。

浏览器凭什么认定两个域名属于同一个站?

先破一个直觉。多数人心里的默认答案是:域名一样就是一个站,域名不一样就是两个站。这个答案在shop.example.comwww.example.com身上碰巧是对的,换个场景立刻就错。

浏览器用的定义是另一套。Google在自家开发者文档里把它写得很直白:一个“站”由协议、有效顶级域,以及紧贴在有效顶级域左边的那一个标签共同构成,这个组合通常写作eTLD+1。

为什么不能靠数点号来切

有效顶级域这个词里的“有效”两个字,是全部麻烦的来源。

example.com的顶级域是com,切一刀就够。example.co.uk呢?如果照样只切最后一段,得到的是uk,那么a.co.ukb.co.uk就成了同一个站的兄弟子域——这意味着任意一家英国公司都能给另一家写Cookie。显然不能这么算。

问题是,co.uk要当成一个整体、com不用,这件事没有任何算法能从域名字符串本身推出来。它是注册政策,不是语法。唯一的办法就是查表。而这张表,就是PSL。

这一条边界同时决定了多少件事

如果它只管Cookie,重要性还有限。实际情况是,现代浏览器把相当多的机制都挂在了同一个判定上:

机制它拿这条边界干什么
Cookie的Domain属性决定你能不能把Cookie写到上一层,写到公共后缀上直接整条丢弃
SameSite判定决定一次请求算不算跨站,进而决定会话Cookie带不带
分区Cookie(CHIPS)分区键取自顶层页面所在的站,站的定义就是这条边界
Fetch MetadataSec-Fetch-Site里的same-site与cross-site按它区分
浏览器隐私隔离第三方存储、缓存分区大多以站为单位而不是以主机为单位
搜索控制台的资源类型网域资源与网址前缀资源覆盖的子域范围不同,跟你对“一个站”的理解直接挂钩

换句话说,这不是一个冷门的规范细节,而是一个被复用了很多次的单点。一处判定,多处后果。它错了,错的不是一件事。

那份决定边界的清单,到底是个什么东西?

我把2026年7月28日这天的PSL原文完整拉了下来,逐行解析。全文332855字节、16410行,去掉注释和空行之后是10239条有效规则。

两个段落,两种性质

文件被两组标记切成了泾渭分明的两半:

段落条数谁往里写典型内容
ICANN段6949域名注册管理机构comco.ukcom.cnne.jp
PRIVATE段3290各家公司自己申请github.iovercel.appmyshopify.com

ICANN段有个反直觉的地方:6949条里有5508条是带点的多段后缀,占79.3%,真正的单标签顶级域只有1441个。也就是说,那种“顶级域就是最后一段”的心智模型,对将近八成的条目都是错的。

全世界只有8条例外规则

PSL的语法一共三种:普通规则、以*.开头的通配规则、以!开头的例外规则。前两种数量可观——通配规则有281条(ICANN段16条、PRIVATE段265条)。例外规则则少得有点好笑:整份清单只有8条。

而且这8条的内容很有年代感:一条是!www.ck,剩下7条全是日本的市,川崎、北九州、神户、名古屋、札幌、仙台、横滨。这不是随手写的,是因为日本的地域型域名规则里,市一级默认被当作公共后缀,唯独这几个大城市自己要用,所以单独开了口子。一份被全球浏览器共同依赖的清单,其例外条款里躺着七座日本城市的名字,这大概是互联网基础设施最朴素的样子。

PRIVATE段里,谁在认真对待这件事

PRIVATE段的3290条规则来自602个提交块。分布极其不均:

提交方登记条数占PRIVATE段
亚马逊系(合并23个分块)84425.7%
DynDNS.com2798.5%
GMO Pepabo1073.3%
No-IP.com852.6%
其余576家合计197560.0%

一家云厂商占了整个PRIVATE段的四分之一,而304个提交块(占50.5%)只登记了一条规则。亚马逊那844条还不是一次交上去的,而是按产品线拆成23个块陆续提交的——对象存储一块、托管工作流一块、云端开发环境一块。顺带一提,全表最深的一条规则有7段:*.airflow.cn-north-1.on.amazonwebservices.com.cn,光看这一行就知道是谁写的。

还有个细节值得留意:能解析出邮箱的590条提交记录里,本地部分为security的有75个,加上其他安全职能前缀一共81个,占13.7%。提交人把它当安全边界在提交,而清单官方并不这么承诺。这个落差后面还会再出现。

同样是Headless CMS,为什么有的把客户隔开、有的没有?

知道了清单长什么样,接下来是最实际的问题:你正在用的那些平台,在不在里面?

我按官方匹配算法写了一个查询器,把45个常见的托管、建站、内容平台域逐个跑了一遍。判据很简单:如果一个租户站的eTLD+1等于平台自己的注册域,说明这个平台没登记,所有客户挤在同一个站里;如果eTLD+1是租户自己那一段,说明登记过了,客户各自独立。

这45个域覆盖的正是独立站建站时会摆上台面的那几类方案:托管型SaaS、自建、纯代码,以及近两年冒出来的一堆前端托管。选型清单上通常只比价格、生态和SEO表现,边界这一栏基本没人填。

按行业分档,差距大得离谱

档位已登记未登记登记率
可视化建站工具50100%
前端与静态托管12286%
WordPress托管3633%
Headless CMS2918%
电商SaaS1517%

45家里23家登记了、22家没有,总体几乎对半开。可一拆开就完全不是对半开的样子:最高的一档是100%,最低的一档是17%,中间几乎没有过渡地带。

我原本准备写进去的结论是“越靠近部署越在意、越靠近内容越不管”。这张表把它推翻了——可视化建站工具离部署远得很,却是唯一一个全员登记的档。

换个角度才通:真正的分界不是平台做什么业务,而是这家平台有没有把“客户之间互不信任”当成自己的风险。前端托管和建站工具的客户是一群素不相识的人,同一个域名底下的邻居随时可能是对手;Headless CMS和电商SaaS的默认心智则是“我的用户是编辑和店主,都是自己人”。

三组把差异摆到明面上的对照

光看比例还不够刺激,几组具体的对照更能说明问题。

第一组,同行不同命。Headless CMS这一档里,Strapi登记了strapiapp.com,而且连媒体子域media.strapiapp.com都单独登记了一条;Contentful登记了预览用的ctfcloud.net。而Sanity、Storyblok、Prismic、Hygraph、Directus、Payload、Ghost、Kontent.ai、TinaCMS——搜遍整份清单,一条都没有。同一个品类、同一批客户、完全相反的选择。

之前拆这三家在SEO上的六个维度差异时,比的是渲染模式、结构化数据、多语言这些看得见的东西。域名边界这一层,当时压根没进视野。

第二组,同一家公司的两个域。Shopify登记了myshopify.com,实测在真实商店页面上写domain=myshopify.com的Cookie会被浏览器拒绝,隔离是实打实的。但它的预览域shopifypreview.com不在清单里。正式域隔离,预览域不隔离,而预览链接恰恰是最容易被随手转发出去的那一类。

第三组,换了域名之后。WP Engine在清单里有两条,wpenginepowered.comjs.wpenginepowered.com,都是新域。旧域wpengine.com至今一条都没有。这说明他们知道该登记——只是登记的是新域,老客户还留在没登记的那一边。

最后一个对照最有画面感:两大托管博客平台,Google的blogspot.com在清单里,而wordpress.com一条都没有。同样是让千万人开博客的地方,一个划了边界,一个没划。

这里有个坑,我自己先掉进去了

第一版统计我是按关键词搜的,搜payload命中了一条payload.dev,于是把Payload这家CMS记成了“已登记”。回头核对提交方才发现,payload.dev是Figma提交的,跟那家CMS毫无关系。同名撞车让整档的登记率算高了一截。

教训是:判定一个平台在不在清单里,必须拿它实际分给客户的那个域去查,再回头看这条规则是谁提交的,两头都对上才算数。光搜品牌名,撞上重名就会得出反过来的结论。

我在真实浏览器里做了一次跨租户实验,结果如何?

上面全是查表推出来的。查表会不会和浏览器的实际行为对不上?这必须实测。

实验怎么设计的

用自动化控制两个浏览器:本机真实的Chrome 150,以及自动化套件自带的Chromium 148。全程无痕上下文,写入的探针叫d75probe,值固定为1,不含任何有意义的信息,每组跑完清空。判据是写入是否被浏览器接受,以及换一个租户站之后还读不读得到。

场景动作预期实测
A平台未登记在租户站写domain=wordpress.com能写进去写进去了 ✔
A平台未登记换到另一个租户站读读得到读到了 ✔
B平台已登记domain=github.io被拒被拒 ✔
B平台已登记domain=aws.github.io能写进去写进去了 ✔
B平台已登记换到另一个租户站读读不到读不到 ✔
C顶级域对照domain=com被拒被拒 ✔
D电商平台对照domain=myshopify.com被拒被拒 ✔

七项全中,Chrome 150与Chromium 148结果逐条一致。查表推导和浏览器实际行为完全对得上,说明这套判定不是纸面规范,是真在跑的代码。

A组值得单独说:它不止是“读得到”

A组的第一步很平淡:在一个租户站上写下带平台注册域的Cookie,浏览器接受了,Cookie罐里那条记录的域字段是.wordpress.com

真正让我坐直的是第二步。导航到另一个完全不相干的租户站之后,我没有只看JS能不能读到,而是把这一次导航发出的全部请求的Cookie头都抓了下来。16个请求带着这条探针发了出去,其中1条是顶层文档请求。也就是说,这条Cookie不是躺在浏览器里能被读一读而已——浏览器主动把它送到了另一家租户的服务器上。

抓到的那条请求头长这样(截断处理):

Cookie: tk_ai=SqN%2F70%2FcHp3rLY%2F92R913HGz; tk_qs=; ccpa_applies=false;
        usprivacy=1---; wordads_uid=d8o85roq1785246922893; d75probe=1

探针在最后一位。但请注意它前面那几位。

平台自己在这条共享边界上放了什么?

上面那条请求头里,d75probe是我放的,其余几条不是。这就引出了一个更有意思的问题:既然这条边界是共享的,平台自己有没有在用它?

五年有效期的跨租户标识

我直接看了几个平台首页的响应头。dailypost.wordpress.com下发了6条Cookie,其中一条是这样的:

tk_ai=...; expires=Sun, 27 Jul 2031 13:47:47 GMT; Max-Age=157680000;
path=/; domain=.wordpress.com; secure

Max-Age是157680000秒,折合整整5年。域属性写的是.wordpress.com,意味着它对每一个租户站都有效。另一家建站平台也是同样的路数,下发一条Domain=.squarespace.com、有效期到2027年的标识。

再回头看那条跨租户请求头里的wordads_uid,名字已经说明了用途。这条共享边界不是没人注意到的疏漏,它是平台产品设计里明明白白在用的一块地基。

这就是它难改的原因

到这一步,很容易冒出一句“那赶紧去申请登记啊”。但请把因果关系再理一遍:一旦这个域进了PSL,平台自己那套跨租户的标识、统计和广告归因,第二天就全断了。

所以这不是一个待办事项被忘了,而是一个平台有理由不去做的动作。你作为租户,等的是一个和你利益并不一致的决定。凡是“某个开关只能由别人来拨、而那个人拨了会亏”的场景,等是等不来的,只能绕。

你浏览器里的那份清单,其实停在四个月前?

写到这儿我本来准备收尾了。结果一个念头冒出来:浏览器里的PSL是从哪来的?

去翻了Chromium源码里对应目录的说明,第一句话就是关键——这个目录存放的是“Chromium对公共后缀列表的一份拷贝”。拷贝。不是实时查询,是随浏览器一起发布的快照。

怎么测一份看不见的快照

问题来了:怎么知道这份拷贝停在哪一天?

PSL没有暴露任何查询接口,浏览器也不会告诉你它内置的版本号。我用的办法是把域名伪造出来:用自动化工具的路由拦截,把所有请求都截下来返回一个空白页面,这样https://tenant-a.任意后缀/都能正常打开,而浏览器对这个页面的源判定、Cookie判定,全部按真实规则走。

接着对每个待测后缀执行同一个动作:在tenant-a.某后缀上写domain=某后缀。被拒说明浏览器认它是公共后缀,写进去说明不认。一个动作,直接读出浏览器内置快照里有没有这条规则。

分界线卡得异常干净

先拉了从2024年初到现在的9个PSL历史版本,算出每个时间窗新增了哪些规则,然后每窗抽5条去测:

规则进入PSL的时间窗Chrome 150认出Chromium 148认出
2024-01至2024-075/55/5
2024-07至2025-015/55/5
2025-01至2025-045/55/5
2025-04至2025-075/55/5
2025-07至2025-105/55/5
2025-10至2026-015/55/5
2026-01至2026-025/55/5
2026-02至2026-045/55/5
2026-04之后0/150/15

另外还测了7条根本不在清单里的域名当阴性对照,两个浏览器都是0认出——说明这套测法不会造假阳性。

结论没有任何模糊地带:2026年4月1日之前进入PSL的规则,40条测40条全部生效;4月1日之后进入的,15条测15条全部无效。今天是7月28日,滞后至少4个月,期间已经合入清单的112条规则,在这两个浏览器里一条都还没开始工作。

升级浏览器不等于更新清单

最反直觉的一条在这里:Chrome 150是当前的稳定版,Chromium 148比它落后两个大版本,两者的PSL快照却完全一样。

这意味着“让用户升级浏览器”根本解决不了这个问题——版本号涨了,清单不一定跟着走。PSL官方的说明页里其实早就把风险写了出来,措辞相当不客气:有人拿PSL来判断一个域名是不是有效域名,“This is dangerous”;如果以静态方式集成、又不定期更新,软件就会把有效的顶级域判成无效,或者把已经退役的当成有效。

这段警告的主语是“集成PSL的软件”,而浏览器正是最大的那一个。

想让自己的域名进这份清单,要排多久?

假设你就是那家没登记的平台,现在决心补上,流程是什么样?

门槛比想象中高

官方指南要求先证明你确实控制这个域名,首选办法是加一条名为_psl的DNS文本记录,内容指向你那个合并请求的链接。还有一条容易被忽略的硬要求:提交的域名,注册到期日必须比提交日晚2年以上,注册期不足一年的可能被直接移除。

这两条其实相当合理——它筛掉的正是那些“用完就扔”的域名。

队列有多长

我去仓库现拉了数据。截至2026年7月28日:

指标数值
待处理的合并请求65个
等待天数中位数37天
等待超过90天的7个(10.8%)
最久的一个已等405天
已合并样本的中位耗时7天
已合并样本的平均耗时28.4天
历史上最慢的一次554天

中位数7天看着挺客气,平均值28.4天暴露了长尾。队列里躺着的名字并不都是小公司——某云厂商2026年第二季度的批量提交排了168天,某知名营销平台的申请排了91天。

官方指南对此的表述非常坦率,原文是全大写的:“There are NO SERVICE LEVEL AGREEMENTS ON TIME”,没有任何时效承诺,也不要期待处理速度或紧急通道。这是一群志愿者在维护一份全球浏览器都在用的文件,这个反差本身就值得记一笔。

两段延迟是要叠加的

这里有个很容易算错的账。合并进清单不等于生效,合并之后还要等浏览器把新快照打包发布,而上一节实测出来的这一段是4个月。

两段加起来:中位37天的排队,加上4个月的快照滞后。今天决定要划这条边界,用户的浏览器真正开始执行它,保守估计要等半年。做技术方案的时候,把这半年算进去,比事后解释为什么“我们明明登记了”要省事得多。

边界被改动的那一刻,会发生什么?

清单不是只增不减的。把历史版本对比一遍就能看到它一直在两个方向上动:

时间范围新增规则删除规则
近一年(2025-07起)47283
2026年以来19554
近四个月11229

加进去:原本能跨的突然跨不了

一个域被加进PSL,效果是立刻把它变成一堵墙。原先写在这一层上的Cookie,规范里说得很明确:如果清单的变化导致某条Cookie的域变成了公共后缀,那么这条Cookie就被视为无效。

请注意这句话的时态。它作用于已经存在的Cookie,不是只影响以后新写的。用户浏览器里躺着的登录态,可能在某天升级浏览器之后集体作废,而你的服务端日志上什么都看不到——只会看到一批老用户忽然都变成了新访客。

移出来:原本隔开的突然并成一家

反方向更危险,而且一年发生83次。一个域从清单里被删掉,意味着此前被隔离的租户,从某个浏览器版本起开始共用一个Cookie罐

没有任何报错、没有任何告警、你的监控面板一片绿色。安全边界消失这件事,在被动一方那里是完全静默的。这也是为什么把PSL当成安全边界要格外谨慎——它是一个由第三方维护、可以在你不知情的情况下被移动的边界。

换成Headless这套架构,边界具体卡在哪几处?

回到开头那个客户的问题。Headless的部署形态天然是多域的,边界问题因此被放大了好几倍。保哥手上那个上线半年又回滚的案子复盘时列了三本账——成本、工序、团队,现在回头看,还漏了一本:域名边界这本账,当时压根没人记。

八个具体的落点

落点边界没划好会怎样
预览环境登录态预览域与正式域不同站,会话Cookie带不过去,编辑反复登录
内容后台与前端打通单点登录跨不过去,只能退回各登各的
API子域鉴权Cookie方案在跨站时失效,被迫改令牌,改造量不小
同租户串味平台未登记时,别的客户能给你的预览域写Cookie
跨域资源策略Sec-Fetch-Site的判定跟着变,同源策略与CORS配置得重算
搜索控制台资源网域资源的覆盖范围与你以为的“一个站”不一致
预览域被索引托管平台的默认域常被抓取,预生产环境泄漏进索引是老问题了
统计与同意管理同意状态存在Cookie里,跨不过去就要重新弹窗,同意管理平台的选型要连边界一起考虑

SEO这一侧也别漏

技术侧之外,还有几件和搜索直接相关的。Headless上线时那套要自己重搭的SEO基建里,站点地图和重定向是明面上的活;域名边界是暗面上的活,它不报错,但会让你的规范网址判定指向一个你没打算对外的域。

还有一件容易搞混的事:SEO意义上的“子域还是子目录”,和浏览器意义上的“是不是同一个站”,是两套完全不相干的判定。前者讨论的是权重怎么传导,后者讨论的是Cookie能不能过去。同一个架构决策,两套评价体系,别拿一套的结论去回答另一套的问题。

上线之前,怎么把这件事一次定死?

最后落到可执行的部分。下面这套顺序,保哥现在给客户做架构评审时是照着走的。

三条一分钟就能查完的

  1. 把你正在用的每一个平台默认域抄下来,去清单里搜一遍。直接在PSL原文里搜字符串就行,几秒钟出结果。搜不到,就按“所有客户共用一个站”来设计。
  2. 在租户站的控制台里试着往平台注册域写一条Cookie。写进去了,说明边界不存在;被拒了,说明生效。这一步比查表更可信,因为它测的是用户那台浏览器的真实行为。
  3. 看一眼平台自己下发的Cookie的域属性。如果平台自己就在往共享域上写长期标识,那么这个边界短期内不会有变化。

域名规划的两条原则

第一条,凡是要带登录态的,全部收进你自己的注册域。前端www、接口api、预览preview、后台admin,都挂在自有域的子域上。这样一来边界是你自己划的,不依赖任何第三方的清单,也不用等半年。托管平台给的默认域只当部署产物,不当业务入口。这条和出海站选ccTLD、子目录还是子域名那套决策并不冲突——那边定的是内容怎么分,这边定的是会话怎么走,两件事分开定,再看有没有打架。

第二条,接受“跨站”是常态,别指望靠Cookie把它抹平。如果架构上确实必须跨站,那就从一开始按跨站设计:令牌走请求头、会话不依赖顶层域的Cookie、需要传状态的地方显式传。前端框架的渲染模式选择要和这条一起定,因为它决定了鉴权发生在服务端还是浏览器端。

三件别做的事

别把PSL当成一份可以实时查询的权威源。它是一份缓存,你面前每个用户手里那份的版本都不一样。任何“我查了PSL所以一定如何”的推理,都得先问一句:查的是谁那份?

别把它当安全边界的唯一凭据。它由志愿者维护、可被移除、你收不到通知。真正的隔离要靠你自己的鉴权,PSL最多算一层附赠的保险。

别在没测过的情况下相信任何解析库的结论。库里也是快照,而且往往比浏览器还旧。要判断真实行为,就去真实浏览器里写一条Cookie试试——这件事的成本是30秒。

常见问题解答

我用的托管平台不在清单里,是不是必须立刻换掉?

不必然。要看你在那个域上放了什么。如果它只承载静态展示、没有登录态、没有敏感Cookie,那么共用边界的实际影响很小。真正需要动的是两类:一类是在平台默认域上跑带登录的预览或后台,另一类是把用户的支付、账号相关流程放在了平台默认域上。这两类应该尽快迁到自有注册域的子域下。判断顺序是先看“这个域上有没有会话”,再决定要不要动,而不是一看到未登记就全盘重构。

我自己的公司域名需要去申请加入PSL吗?

绝大多数情况不需要,而且不该申请。PSL的PRIVATE段是给“把子域分发给互不信任的第三方”的平台准备的,比如托管商、动态DNS服务商、多租户SaaS。如果你的子域都是自己人在用,加进去反而会让你自己的跨子域Cookie直接失效,属于自伤。官方指南也明确表示,服务用户数达不到规模的项目大概率会被拒。判据很简单:你的子域会不会交给你不信任的人?不会,就别去排这个队。

预览域和正式域不同站,除了重新登录还有别的后果吗?

有,而且更隐蔽。同意管理平台的选择记录通常存在Cookie里,跨不过去就会在预览环境反复弹窗,编辑很容易顺手点掉,导致预览环境的统计口径和线上不一致。此外,如果预览环境要调用正式环境的接口,浏览器会把这次调用判成跨站,Sec-Fetch-Site的值随之改变,服务端如果做了基于这个头的校验就会开始拒绝。还有一层是缓存分区:不同站意味着不同的分区键,预览环境的资源缓存不会复用正式站的,首屏会明显慢一截。

怎么快速判断一个域名的eTLD+1到底是什么?

最省事也最可信的办法是在目标域的页面上打开控制台,试着往你猜测的那一层写Cookie,写得进去说明它不是公共后缀。查表当然也行,但要注意查的那份表和用户浏览器里的那份可能差着几个月。另外提醒一句,很多现成的域名解析工具用的是自带快照,判断新域名时容易出错,做批量根域名提取这类工作时,遇到近期新增的后缀要额外核对一遍。

浏览器快照滞后4个月,这个数字会一直是4个月吗?

不会,它是浮动的,而且没有公开的承诺周期。本文测的是2026年7月底的两个具体版本,测出来的分界线落在4月初。下次再测很可能是另一个数字。真正要记住的不是“4个月”这个值,而是这个延迟客观存在、量级是月而不是天,并且升级浏览器版本并不保证它会缩短。做方案时按季度量级留余量,比盯着某个具体数字更稳妥。

已经在共享边界上跑了一段时间,怎么收拾?

分三步。第一步止血:把新的登录态、支付态全部迁到自有注册域的子域,不要在共享域上再产生新的会话。第二步清理:给共享域上已经写出去的Cookie发一轮删除指令,也就是重发同名同属性、寿命为0的Cookie,这一步必须把域属性写得和当初完全一致,否则删不掉。第三步验证:用无痕窗口走一遍完整流程,确认新会话的Cookie域字段是你自己的域。整个过程不需要停机,但顺序不能反——先迁再清,反过来会把在线用户直接踢下线。

权威参考资料

分享到
标签
版权声明

本文标题:《后台一个域、前端一个域、预览又一个域,浏览器认不认它们是同一个站》

本文链接:https://zhangwenbao.com/public-suffix-list-site-boundary-cookie-subdomain.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交