![HTTP(S) URL 的主机名部分是否真正不区分大小写?](https://linux22.com/image/653313/HTTP(S)%20URL%20%E7%9A%84%E4%B8%BB%E6%9C%BA%E5%90%8D%E9%83%A8%E5%88%86%E6%98%AF%E5%90%A6%E7%9C%9F%E6%AD%A3%E4%B8%8D%E5%8C%BA%E5%88%86%E5%A4%A7%E5%B0%8F%E5%86%99%EF%BC%9F.png)
在不对服务端配置进行任何更改的情况下,使用 http(s)://CompanyName.com/xyz 作为 URL(例如,用于品牌推广目的)是否安全?
我知道 DNS 不区分大小写,但仍会有副作用吗?例如,我想到链中的各个部分都无法匹配 CompanyName.com ~ companyname.com:
- 某些 Web 后端可能无法匹配
- 某些负载均衡器/代理/缓存/应用层防火墙可能无法匹配
- 某些客户端可能会错误地应用同源策略
- 某些客户端可能无法匹配证书检查
- 虽然 DNS 通常不区分大小写,但 IDN 可以改变这种情况吗?
有谁遇到过 URL 主机名部分大写字母相关的问题或其他问题吗?
[编辑]@Michael Hampton 指出,根据 HTTP 标准,主机名不区分大小写,但有些软件在这方面不符合要求。
我试图了解不合规软件(尤其是客户端)的普遍程度。我认为所有最近的主流浏览器都没有问题,但移动应用程序呢?(我是否应该将其拆分成一个单独的 SF 问题?)[/编辑]
答案1
是的,主机名确实不区分大小写,如RFC 3986§3.2.2, 因为DNS 中的主机名一般不区分大小写。这个 RFC 还给出了如何避免你提到的问题的建议:
尽管主机不区分大小写,但为了统一起见,生产者和规范化者应该对注册名称和十六进制地址使用小写字母,而对百分比编码仅使用大写字母。
我至少见过一个 HTTP 缓存(W3 总缓存) 不会以这种方式规范化主机名,并且最终多次缓存内容,例如在example.com
、、等下Example.Com
。EXAMPLE.COM