中文域名原理
1 问题
在域名查询时候,会看到非英文的顶级域名,如下图
一个域名要能够访问,至少有dns 对其解析。但是dns协议上是不支持非英文数字域名解析的,那么为什么会有这种非英文的域名?浏览器又是如何能访问到这种域名的?
2 分析
说其原理,得先简单了解下 Punycode,它是为支持IDNs(国际化域名Internationalized Domain Names)而诞生,使得支持各种语言自身的域名。
Punycode是根据 RFC 3492 标准而制定的编码系统,主要用于把域名从地方语言所采用的Unicode编码转换成为可用于DNS系统的编码。经过Punycode编码后,结果为26个字母+10个数字和“-”组成。这样,其结果就可以进行dns 解析了。
例如“深圳.中国” 经过Punycode编码,结果为:xn--fes124c.xn--fiqs8s。
了解了Punycode,中文域名访问的原理,就差不多明白了。比如用户访问“http://深圳.中国”,步骤就是:
1 用户输入“http://深圳.中国”;
2 浏览器发现其不是英文域名,对其进行Punycode编码,编码后为“http://xn--fes124c.xn--fiqs8s”;
3 浏览器请求dns 解析“http://xn--fes124c.xn--fiqs8s”;
4 dns 解析后的请求流程和普通URL 访问是一样的了,但是浏览器url 显示还是原来的“http://深圳.中国”。
如在浏览器地址输入框输入:http://520.中国,在网络请求里面发现请求域名是“http://520.xn--fiqs8s/”。在chrome 浏览器打开网页,再把上面的网页地址全选拷贝一下,在其他地方粘贴出来,发现也会变成这样了:http://520.xn--fiqs8s/。
特别注意的是,这个Punycode编码是本地浏览器行为,没有进行网络交互。也就是说这个编码需要浏览器支持,只是目前大部分浏览器已经支持了Punycode 编码。
3 总结
在网络请求的域名,是不支持中文的,只是本地浏览器做了“障眼法”,把非英文域名做了Punycode转码,再去发起url 请求的,而浏览器显示上还是原来的中文域名,使得用户看到“好像”支持中文域名了。
(全文完)
(欢迎转载本站文章,但请注明作者和出处 云域 – Yuccn )