RFC 3986指定URI的主机组件‘大小写不敏感’。然而,它没有指定什么‘不区分大小写’的UCS或UTF-8字符。
在RFC中给出的例子(例如"<HTTP://www.EXAMPLE.com/>等价于<http://www.example.com/>")允许我们推断‘不区分大小写’意味着字符are至少被认为等同于UTF-8字符集中它们前面的字符32,即a-z。但是,没有提到应该如何对待这个范围之外的字符。因此,考虑到www.OLÉ.com的非编码、非标准化注册名称,我认为RFC允许三种可能的标准化形式:
所以问题是:哪个是正确的?如果是案例1,什么定义了哪些字符被认为是大写,哪些被认为是小写(以及哪些字符没有大小写)?
发布于 2015-10-30 03:05:39
由DNS解析的主机名总是小写的。
它是在DNS主机名中不可能有UTF-8字符。 (RFC 1123),然而,一个解决办法已经与“国际化域名”。这种解决方法通常称为双数码。
Punycode允许用ASCII字符表示非ASCII字符。
非ASCII字符由在主机名称标签(字母、数字和连字符)中允许的ASCII字符表示。-- https://www.ietf.org/rfc/rfc3492.txt
至于您在问题(www.olé.com)中提供的示例,要解决的域名不是www.ol%E9.com。
如果您在域名中得到百分比符号,这意味着您有URL编码的主机名,这是不正确的,至少不能解决。
例如,具有如下所示的a标记将正确工作:
<a href="//www.ol%C3%A9.com">Click Here</a>但是,DNS服务器将不解析www.ol%C3%A9.com,而是将转换后的域名解析为punycode:
示例
www.ol%C3%A9.com变成了
www.olé.com在“小语码”中翻译为:
www.xn--ol-cja.comWeb浏览器通常会将大写字符转换为小写版本。例如,www.olé.com和www.olÉ.com都转换为相同的DNS主机名(www.xn--ol-cja.com),因为www.olÉ.com被降低到www.olé.com。
我推荐两种工具来检查IDN域名,以了解一个域名在经过双码翻译后会是什么样子:
维瑞信的IDN工具要严格得多。尝试这两种工具,以www.olÉ.com作为输入,以了解我的意思。
IDNA (应用程序的国际化域名)的规则很复杂,但是有两个主要的RFC值得一看:
rfc5894 3.1.3节指定在下列情况下可能不允许字符:
https://stackoverflow.com/questions/7780359
复制相似问题