结论先给:如果二级域名的主机名、路径和参数由多个系统同时拼接,唯一责任方应当是“最终输出完整URL的那个系统”,而不是提供片段的上游系统。只有当上游系统直接写入DNS记录或反向代理配置时,责任才转移到上游;否则让上游为最终网址负责,会导致改一处、漏三处。下面说明这个判断的适用条件、一个会让它失效的反例,以及可以立刻执行的责任切分动作。
多个系统生成网址,常见形态是:内容系统给出路径片段,商品或栏目系统给出参数,CDN或网关补上协议和主机名,前端再拼成可点击链接。此时要问的不是“谁写了这段字符串”,而是“谁把各段合成一个可解析的完整URL”。
如果最终拼接发生在服务端模板或API返回层,责任方就是该层。它的输出应当是完整、可直接请求的网址,上游只提供经过约束的片段,例如只允许字母数字和连字符的slug,不允许带问号、井号或协议头。
这样切分的好处是:当二级域名规则变化时,只需要改最终拼接层的一处配置,所有调用方同步生效。反过来,如果让每个上游系统各自拼完整网址,二级域名一旦从 m.example.com 调整为 shop.example.com,就要逐个系统排查,遗漏概率随系统数量上升。
责任方上移是成立的,但条件比较窄:上游系统直接管理主机名对应的基础设施,例如它负责写入DNS记录、签发证书或维护反向代理的server_name。这时上游改动会直接改变二级域名的可达性,最终拼接层只是被动接受。
判断方法是看变更影响面。若一个系统修改后,其他系统的输出会立即失效,说明它掌握的是“定义权”,不是“拼接权”。此时应把它登记为唯一责任方,并要求它对外提供稳定的主机名契约,而不是让下游猜测当前生效的域名。
不满足这个条件时,不要因为某个系统“级别更高”或“更早存在”就把责任交给它。责任归属看的是控制点,不是组织层级。
假设最终拼接层只负责把主机名和路径拼起来,但参数部分由另一个系统以完整查询串形式返回,且该查询串里已经带了绝对地址,例如回调地址或跳转地址。这时最终拼接层实际上无法控制完整URL,唯一责任方应落在生成绝对地址的那个系统。
这个反例的识别信号是:最终拼接层拿到的不是片段,而是已经包含协议和主机名的字符串。只要出现这种情况,就必须把责任方改判给绝对地址的生成者,否则改二级域名时,最终拼接层改了,绝对地址里的旧域名仍然会被请求出去。
因此,责任切分不是一次定终身。每次新增一个会输出绝对地址的系统,都要重新确认最终拼接层是否仍然是真正的控制点。
下一步动作不是开会讨论,而是做一次输出审计:把各系统当前产出的网址字段抽样出来,按“片段、路径、查询串、绝对地址”分类。凡是输出绝对地址的系统,单独列成责任方候选。
做完审计后,如果发现绝对地址生成者超过一个,说明当前不存在唯一责任方,应先收敛到最终拼接层,再谈规则统一。这个动作的结果会直接决定下一步是改配置,还是先改系统间的数据契约。
有人会用“某个二级域名下的页面没被收录”来判断责任在谁。这个推断不成立:robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录,抓取量或请求量归零还可能来自网络、缓存、鉴权或上游限流。这些现象只能提示去核查,不能单独证明责任归属。
要判断责任方,仍然回到控制点:谁最终拼出完整URL,谁就对该二级域名的网址规则负责。把这个控制点固定下来,再去看收录和抓取数据,才有比较意义。