这里的设计选择是什么?为什么 URL 设计为不区分大小写?
例如:当我输入“gaming.stackexchange.com”时,它会带我到 Arqade.SE。如果我输入“GaminG.StackExchangE.CoM”,它会带我到同一个地方。
我知道对此也有一些反例,比如一些已指出如下。
答案1
RFC 1035第 2.3.3 节规定 DNS 名称不区分大小写。这意味着 URL 的主机部分(且只有主机部分)不区分大小写。
我不知道这个决定背后的具体想法,但该标准是在 1987 年制定的,当时对混合大小写字符集支持有限的系统仍然相对普遍。
答案2
我可以提出两个理由,但它们不一定与最初的决定有任何关系。
- 使用方便
- 消除歧义
想象一下必须记住以下之间的区别:
谷歌 谷歌 GOogle 谷歌 谷歌Le 谷歌E (....)
如果 Host.com 的含义与 host.com 完全不同,那就不太实际了。DNS 名称应该是一个标签,使用特殊字符或区分大写字母和小写字母只会使情况复杂化,而没有任何实际用途。
答案3
可能的原因:
安全性:DNS 名称中只有 37 个有效字符*。小写字母字符设置了第 6 位,因此解析器库或 DNS 服务器可以立即相对简单地清理其输入,方法是将其与二进制 0100 0000 进行 AND 运算,并丢弃任何非 ASCII 45、48 到 57(数字)或 65 到 90(字母)的内容。一旦遇到点,就大功告成了。无需弄清楚是什么,也无需忽略空格、标记化或执行解析文本所涉及的任何其他有趣且缓冲区溢出的雷区操作。对主机名明确限制 63 个(?)字符也有助于实现这一点。
DNS 整体规模庞大,需要快速运行。我相信,它有助于加快索引和通过 DNS 数据库查找 DNS 名称的速度,从而减少 DNS 名称的字符数。对于大小,可能也有类似的说法。考虑到 DNS 发明时的计算机功能,我相信将 DNS 名称缩减到“最低限度”是必要的。
我确实相信在 DNS 发明的时候,实际上使用的计算机和终端无法显示小写字符(我在这里想到的是 Apple II,但我确信当时的一些旧大型机连接了同样旧的终端)。
*你以前见过unicode域名吗?它们是国际化域名- 在此基础上构建的扩展。它们实际上内部由“xn--”和使用标准 DNS 字符集的 Punycode 编码字符串组成,并由兼容浏览器呈现为 Unicode。