HTTP主机名案例(上/下)是否重要?

时间:2009-06-02 16:23:29

标签: php http dns case-sensitive

换句话说,我使用http://www.example.com/还是http://wwW.exAmPLe.COm/

是否重要

我最近遇到了主机名的奇怪问题:我有一个Apache2.2 + PHP5.1.4网络服务器,可以通过各种浏览器访问。特别是IE6用户(特别是他们的UA字符串背负着大量的BHO,没有模式)似乎在通过http://www.Example.com/进入时访问网站时出现问题(cookie消失,JS拒绝加载),但不是{{ 3}}

我检查了http://www.example.com/HTTP RFC,我的DNS,Cookie设置和P3P policies;然而,我甚至没有看到提到域名是区分大小写的。

(我知道路径和查询字符串区分大小写(?x=foo?x=Foo不同)并对其进行适当处理;我的代码中没有对域名进行解析/处理)

我做错了什么,或者这只是一些浏览器+工具栏废话我应该解决?

5 个答案:

答案 0 :(得分:24)

域名区分大小写; Example.com将解析为与eXaMpLe.CoM相同的IP。如果Web服务器或浏览器将Host标头视为区分大小写,则表示存在错误。

答案 1 :(得分:5)

不,这不应该有任何区别。

查看URL RFC Spec(http://www.ietf.org/rfc/rfc1738.txt)。从第2.1节开始:

  

对于弹性,程序解释   网址应该处理大写字母   相当于方案中的小写   名称

答案 2 :(得分:4)

既然你把问题作为一个实际问题,然后描述了一个现实世界的问题,答案实际上是:是的。

其他答案对于RFC规范关于主机名的说法是正确的。从技术上讲,它们应该不区分大小写。 (事实上​​,较旧的惯例是顶层域名(TLD)应该是全部大写的......比如“apple.COM”)。

然而,在现实世界中,像OS解析器和主流浏览器这样的成熟软件可以做到这一点。任何类型的二级代码都可以处理这个错误,并搞砸了你。

答案 3 :(得分:1)

根据http://tools.ietf.org/html/rfc1035

  

对于作为官方协议一部分的DNS的所有部分,全部   字符串之间的比较(例如,标签,域名等)   以不区分大小写的方式完成。目前,这个规则是在   整个域名系统毫无例外地强行执行。

接着说,这可能会在未来发生变化。我认为可以安全地假设COM域不区分大小写,但允许使用非ASCII字符的其他域可能会有所不同。

答案 4 :(得分:0)

不,协议说明符没有区分大小写。

You can see this in the RFC for URLs

  

2.1。 URL的主要部分

     

方案名称由一系列序列组成   字符。小写字母   “a” - “z”,数字和字符   加(“+”),句号(“。”)和连字符   (“-“) 被允许。为了弹性,   解释URL的程序应该   将大写字母视为等效字母   计划名称中的小写(例如,   允许“HTTP”以及“http”)。