网址是否区分大小写?

网址的基本结构是:[协议]://[域名]/[路径]

协议和域名部分不分大小写。路径部分是否区分大小写则不一定,要看具体网站后台是如何实现的。

比如,如果服务器是直接将路径映射到文件系统中去找,则不同平台上有不同实现:Mac OS X 默认的文件系统(HFS case-insensitive) 是不分大小写的、Windows 上的 NTFS 也是。而 Linux 系统常用的 ext3/4 则是需要区分大小写的。所以如果服务器不做额外的操作,则会根据文件系统不同有不同效果。

而像知乎这种应用服务器则又有不同。此时路径并不指向文件系统的某个文件,而是作为字符串交有应用来处理。比如,知乎使用的 Tornado 服务器是使用正则表达式来进行匹配路径。正则表达式可以通过不同写法或者标志符来控制是否区分大小写。

继新提到的很多短链接服务区分路径大小写,这是为了增加字符基数、缩短地址长度做出的取舍。假设只使用数字和字母做路径部分,如果不区分大小写,则只有 10+26 = 36 个字符可以使用。 5 个字符长的地址就只能有 36^5 = 60 466 176 种组合。而若区分大小写,则有 10 + 26 + 26 = 62 个字符可用,同样 5 个字符长的地址就有 62^5 = 916 132 832 种组合。短链接地址为了尽可能短,必须要增大基数,因此选择了区分大小写。

如果网址只是给机器使用的话,可以不用计较是否大小写。但实际上难免会遇到要将网址通过手工输入到地址栏的情况(比如将印刷的地址抄写到浏览器中访问)。为了易用性的考虑,在条件允许的情况下应该尽可能的不区分大小写。如果需要区分,则尽可能要对不同写法的地址进行重定向。知乎在这一点上就做得不是很好,比如这个问题如果通过 http://www.zhihu.com/Question/19572705 就无法访问。应该修改 Tornado 服务器的正则表达式设置,使其能匹配大写、混合大小写的地址,或者自动将混合大小写的地址重定向到 http://www.zhihu.com/question/19572705。