网站域名基础⑲域名编码与punycode 非ASCII的处理

网站域名域名基础 域名编码与punycode 非ASCII的处理

DNS 诞生时立了个规矩:域名只能用字母、数字和连字符,别的字符一律不收。这个 LDH 限制(letter-digit-hyphen)管了几十年。那"中文域名"是怎么钻进这个 ASCII 世界的?答案是一道编码戏法:punycode。

规矩从哪来的

RFC 1035 定义 DNS 报文时,主机名只允许 26 个英文字母、0-9 十个数字和连字符,且不区分大小写。1983 年定的协议要满世界跑几十年,把字符集收窄是最稳妥的工程决定——只是没人想到后来全世界都要来用它。

戏法:给中文套一个 ASCII 外壳

思路不是改造 DNS,而是在进 DNS 之前先做转换:把非 ASCII 的名字用 punycode 算法压成一串合法 ASCII,再挂上 "xn--" 前缀做标记。比如"例子.com"进了 DNS 之后叫 xn--fsqu00a.com——浏览器地址栏给你显示中文,底层走的是这串"密码"。

转换发生在哪

在你的设备上。浏览器(或输入法、操作系统)把中文域名转成 punycode 再发起查询,收到结果再转回中文显示。全球的 DNS 服务器对 xn-- 前缀的域名一视同仁——它们眼里这就是个普通 ASCII 域名。不动基础设施就兼容新字符,这个取舍非常聪明。

我实验时踩到的点

邮件里发中文域名,很多客户端不认——邮件协议对 IDN 的支持至今参差;部分老路由器、老系统直接显示 xn-- 原文,一长串看着像出错;同一个域名的"中文写法"和"punycode 写法"要在证书里都覆盖,不然浏览器会报不匹配。

punycode 解决的是"能不能"的问题。下一篇说它托起来的应用层:国际化域名 IDN,中文域名的真实现状。

本文收录于徐果萍文集《论持久站 网站域名》,徐果萍博客原创首发。

扫描二维码推送至手机访问。

版权声明:本文由徐果萍博客网发布,如需转载请注明出处。

本文链接:https://www.xuguoping.net/wangzhanyuming/yumingjichu_019.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。