为什么 IE 不支持(子)域名含有下划线
作者分享了一个让他“永远不会忘记”的调试经历:为什么在IE浏览器中,一旦(子)域名包含下划线,PHP的会话cookie就会完全失效,即使最新的IE11也不例外。 问题的根源追溯到一个2001年的安全补丁(MS01-055)。微软为修补早期漏洞,实施了非常严格的DNS名称校验,要求必须遵循早期的RFC标准(如RFC606/608)。而早期标准并未包含下划线这个字符,因此IE会拒绝设置任何域名部分含有下划线的Cookie。作者指出,微软在此可能混淆了“主机名”与更广义的“域名”概念,因为RFC2181已表明DNS协议本身对标签字符没有限制,但微软的严格校验成为了IE独有的“遗留问题”。 由于这是浏览器端的强制策略,对于开发者而言,唯一的解决方案就是在域名命名中主动避免使用下划线。作者最后抛出了一个观点:在坚持看似“正确”的标准与适应已经普遍接受的实践之间,浏览器厂商该如何选择?