IDNA转换后的域名最大长度是多少?

12

首先:

我将多个域名转换为其IDNA版本并存储到数据库中。我需要知道这种IDNA转换后的域名可能具有的最大长度,以便我可以定义数据库字段的最大长度。

已知事实:

现在,我知道域名(包括任何子域)的最大字符数为255个。

迷惑所在:

乍一看很容易理解,但是...这是否意味着常规ASCII字符或国际字符(想想UTF-8编码)?

例如:"müller.de"这个域名有9个字符,当我忽略“ü”是一个需要更多字节来表示的国际字符时。 "müller.de"的IDNA版本是"xn--mller-kva.de",它有16个字符。这表明,在最大长度方面,根据是否进行了IDNA转换,差异肯定存在。

根据所指的字符类型,255个字符的最大长度可能是国际字符版本、IDNA转换版本或两者兼备。

这就是我有点困惑的地方...特别是,因为我必须考虑到并非所有域名都是健全的,而像"öüßüöäéèê.example.äöüßüöäéèê-äöüßüöäéèê.test.äöüßüöäéèê.com"这样的域名甚至更糟糕。

因此,“猜测”和“盼望最好的结果”不是一个选项。我需要确切的答案...

问题是:

基于已知事实,即域名(包括任何子域)的最大字符数为255个...经过IDNA转换后的域名的最大长度是多少?

他们是否是指 IDNA 转换版本(punycode)也受到 255 个字符的限制(这意味着使用国际/Unicode 字符的域名在其 Unicode 表示中实际上具有更短的限制,因为它们的 IDNA 转换版本必须遵守 255 个字符的限制)?

3个回答

11

好的,我想我自己找到了答案,并且我在搜索互联网时找到了这个代码片段:

引入国际化域名(IDN)基本上有两种不同的选择。第一种是对域名系统(DNS)进行调整,允许直接使用Unicode字符。人们认为这是太过激烈的措施,因此选择了第二种选项。这涉及编制算法以指定如何将Unicode字符串转换为允许的ASCII域名。然后将此ACE字符串(ACE代表ASCII兼容编码)输入到DNS中。IDN的引入意味着DNS中的条目不再与域名完全相同。

来源

答案是应该尊重长度限制,DNS期望的长度限制是255个字符。

我的怀疑是正确的。使用IDN时,域名和DNS中的条目是两个不同的事物。DNS条目的最大长度才是关键。

域名“müller.de”有9个字符,但相应的ACE(ASCII兼容编码)字符串“xn--mller-kva.de”有16个字符。
DNS使用ACE字符串,并且ACE字符串受到255个字符限制。这意味着它的Unicode(域)版本的最大限制由所使用的Unicode字符数量定义,如果在IDNA转换后该字符串仍适合于255个字符限制内。
天啊,规格说明书肯定应该更清楚一些。特别是国际域名自2004年3月1日左右以来就存在了。但我找到了答案,这才是最重要的。
也许这可以帮助有同样问题的人。
与我的数据库字段长度相关的简单答案是255个字符。
存储域名的IDNA转换(punycode / ACE字符串)版本只确认了这个最大字符限制。

2
谁在计算秒数啊?我只是会接受你的答案而不是我的。这样至少可以回馈你付出的努力。今天我似乎很社交... :) - user1093284
2
@JJC添加了包含引用的源文章,并引用相关的RFC。 - cmbuckley
1
@cbuckley 当我因为“付费工作”而迟到时,有一个搭档真是太好了。在像这样的社区中工作并看到积极的结果,使得StackOverflow变得更有价值。点赞 ;) - user1093284
1
DNS名称限制实际上是253个字符,而不是255 - https://dev59.com/j2oy5IYBdhLWcg3wKrCs#28918017 - Alex Dupuy
1
值得注意的是,每个子域名的长度限制为63个字符,在Punycode转换后也会进行评估。 - B Hart
显示剩余3条评论

8
我的理解是在IDNA转换后应该考虑255个字符的限制。
这是因为DNS记录有这个字符限制,通常DNS记录只能包含字母、数字和连字符(来自Wikipedia)。因此DNS服务器使用IDN的Punycode版本进行记录,而不是Unicode版本。

在查看了一些注册机构网站以及它们关于“带有重音符号和变音符号的域名”的信息后,我得出了同样的结论。是的,在转换后长度为255个字符。但还是谢谢你的回复。这意味着我不是唯一得出同样结论的人,这让我感到放心!;) - user1093284

-2

RFC3492提到了IDNA编码的一个特性:

高效编码:基本字符串长度与扩展字符串长度之比很小。在域名的上下文中,这一点非常重要,因为RFC1034限制了域标签的长度为63个字符。

就是这样。无论是IDNA还是ASCII,63个字符都是任何域名的最大长度。


5
这是关于域名中个别“标签”的限制,而不是整个名称。 - Alnitak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接