【问题标题】:Does HTTP hostname case (upper/lower) matter?HTTP 主机名大小写(大写/小写)重要吗?
【发布时间】:2009-06-02 16:23:29
【问题描述】:

也就是说,我用http://www.example.com/还是http://wwW.exAmPLe.COm/有关系吗?

我最近在主机名方面遇到了奇怪的问题:我有一个 Apache2.2+PHP5.1.4 网络服务器,可以通过各种浏览器访问。尤其是 IE6 用户(尤其是当他们的 UA 字符串承载着大量 BHO 时,还没有模式)在通过 http://www.Example.com/ 进入时似乎无法访问该站点(cookie 消失,JS 拒绝加载),但不是 http://www.example.com/

我检查了HTTPDNS RFC,我的P3P policies,cookie 设置和SOP;但我从未见过任何地方都提到过域名区分大小写。

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

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

【问题讨论】:

    标签: php http dns case-sensitive


    【解决方案1】:

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

    【讨论】:

    • 你是对的 - 缓存脚本之一是区分大小写的域名比较,并导致了问题。强制主机名小写似乎可以解决它。
    • 那么,这个脚本坏了,必须修复。
    【解决方案2】:

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

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

    为了弹性,程序解释 URL 应处理大写字母 相当于方案中的小写 名字

    【讨论】:

    • 我们没有讨论方案名称。 (另外:RFC 1738 是古老的,从那以后已经更新了好几次;当前的 RFC 是 3986)。
    • 按照上面列出的规范 ([ietf.org/rfc/rfc3986.txt][1])。从第 18 页开始: > 尽管主机不区分大小写,但生产者和规范化者 > 为了统一起见,注册名称和十六进制 > 地址应使用小写,而百分比编码仅使用大写 > 字母。 [1]:ietf.org/rfc/rfc3986.txt
    【解决方案3】:

    由于您将问题表述为实际问题,然后描述了现实世界的问题,因此答案实际上是:是的。

    关于 RFC 规范关于主机名的内容,其他答案是正确的。从技术上讲,它们应该不区分大小写。 (事实上​​,旧的约定是顶级域 (TLD) 应该全部大写……比如“apple.COM”)。

    但是,在现实世界中,操作系统解析器和主流浏览器等成熟软件可以做到这一点。任何类型的辅助代码都可能会处理这个错误,并把你搞砸。

    【讨论】:

      【解决方案4】:

      根据https://www.rfc-editor.org/rfc/rfc1035

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

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

      【讨论】:

      • .COM 也接受 IDN...IDN 并没有改变域名不区分大小写的事实,因此 cafe.com 和 CAFÉ.com 是相同的。
      【解决方案5】:

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

      You can see this in the RFC for URLs.

      2.1。 URL的主要部分

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

      【讨论】:

      • 为什么人们总是引用过时的规格?叹息!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2012-07-19
      相关资源
      最近更新 更多