网站域名基础⑲域名编码与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,中文域名的真实现状。
本文收录于徐果萍文集《论持久站 网站域名》,徐果萍博客原创首发。
- 网站域名基础①开篇 为什么我要用一年写365篇域名
- 网站域名基础②什么是域名 从IP到人类可读的网络门牌
- 网站域名基础③域名层级结构 根、TLD、二级域与子域
- 网站域名基础④DNS是什么:一次访问背后的翻译过程
- 网站域名基础⑤根服务器与根区文件:寻址体系的基石
- 网站域名基础⑥ICANN与IANA:谁在管理全球域名
- 网站域名基础⑦域名 URL与网站:三者到底什么关系
- 网站域名基础⑧域名的唯一性与先到先得原则
- 网站域名基础⑨域名生命周期:注册、续费、到期、删除全状态
- 网站域名基础⑩域名简史上篇:从ARPANET到商业化
- 网站域名基础⑪域名简史下篇:新顶级域与全球化
- 网站域名基础⑫域名与IP地址 映射关系的本质
- 网站域名基础⑬端口、协议与域名 一次访问的三要素
- 网站域名基础⑭hosts文件 域名的本地前身
- 网站域名基础⑮局域网域名与mDNS 没有公网也能命名
- 网站域名基础⑯递归解析与迭代解析 查询的两种模式
- 网站域名基础⑰域名权威DNS与递归DNS 角色分工
- 网站域名基础⑱域名缓存 性能与一致性的权衡
- 网站域名基础⑲域名编码与punycode 非ASCII的处理
- 网站域名基础⑳国际化域名IDN 中文域名的实现
- 网站域名基础㉑域名系统的容灾设计
扫描二维码推送至手机访问。
版权声明:本文由徐果萍博客网发布,如需转载请注明出处。
本文链接:https://www.xuguoping.net/wangzhanyuming/yumingjichu_019.html

