Какова максимальная длина IDNA-конвертированного доменного имени? - PullRequest
9 голосов
/ 03 января 2012

Перво-наперво:

Я храню несколько доменов в базе данных, после того как я преобразовал каждое доменное имя в его версию IDNA.Что мне нужно знать, какую максимальную длину может иметь такое доменное имя, преобразованное IDNA, чтобы я мог определить максимальную длину поля базы данных.

Известный факт:

Теперь,Я знаю, что максимальное количество символов в имени домена (включая любые субдомены) составляет 255 символов.

Где я его потерял:

Это легко на первый взгляд, но ... означает ли это обычные символы ascii международных символов (например, кодировка UTF-8)?

В качестве примера: домен «müller.de» имеет 9 символов, когда я игнорирую, что «ü» - это международный символ, для представления которого требуется больше байтов.IDNA-версия «müller.de» - это «xn--mller-kva.de», которая имеет 16 символов.Это показывает, что есть определенная разница в максимальной длине в зависимости от того, «преобразована» ли она в IDNA или нет.

В зависимости от того, какие символы они означают, максимум из 255 символов может быть международной версией символа, преобразованной IDNA версией или даже обеими.

И вот здесь я немного потерял ... особенно, поскольку я должен принять во внимание, что не все домены будут нормальными, и все в таком духе, как "äöüßüöäéèê.com " и того хуже.

Таким образом, «угадывать» и «надеяться на лучшее» не вариант.Мне нужно знать наверняка ...

Вопрос такой:

Основан на известном факте, что максимальное количество символов в имени домена (включая любые субдомены) составляет 255 символов ... какова максимальная длина доменного имени, преобразованного в IDNA?

Или они также означают, что преобразованная в IDNA версия (punycode) такжеограничено 255 символами (что будет означать, что домены с международными символами / символами Юникода на самом деле будут иметь более короткие пределы в своем представлении Unicode, потому что их преобразованная в IDNA версия должна будет соответствовать пределу в 255 символов)?

Ответы [ 3 ]

7 голосов
/ 04 января 2012

ОК, думаю, я узнал сам, и этот фрагмент, который я нашел (по поиску в Интернете), помог:

По сути, для введения интернационализированных доменных имен (IDN) были открыты два разных варианта. Первым было внести изменения в систему доменных имен (DNS), которые позволили бы использовать символы Юникода напрямую. Чувствовалось, что это слишком жесткая мера, и поэтому был выбран второй вариант. Это включало компиляцию алгоритма, чтобы указать, как следует преобразовывать строку в юникоде в разрешенное имя домена ASCII. Эта строка ACE (ACE означает ASCII-совместимое кодирование) затем вводится в DNS. Введение IDN означает, что впервые запись в DNS больше не совпадает с именем домена.

- Источник

Ответ заключается в том, что соответствующая длина - это ограничение в 255 символов, ожидаемое DNS.

Мое подозрение было верным. Доменное имя и запись в DNS - это две разные вещи с IDN. Это максимальная длина записи DNS, которая имеет значение.

Доменное имя "müller.de" имеет 9 символов, но соответствующая строка ACE (ASCII-совместимая кодировка) "xn--mller-kva.de", однако, имеет 16 символов.

Это строка ACE, которая используется DNS, и это строка ACE, которая не превышает 255 символов. Это означает, что максимальный предел его версии Unicode (домена) определяется количеством используемых символов Unicode, и если - после преобразования IDNA - строка по-прежнему соответствует пределу в 255 символов.

Боже, спецификации наверняка могли бы быть немного яснее в таких вещах. Тем более, что международные доменные имена существуют примерно с 1 марта 2004 года. Но я нашел ответ, и это главное.

Возможно, это может помочь тому, у кого такой же вопрос.

Простой ответ, связанный с длиной поля моей базы данных, составляет 255 символов.

Тот факт, что я сохраняю доменные имена в их конвертированной версии IDNA (строка punycode / ACE) только подтверждает это максимальное ограничение символов.

6 голосов
/ 04 января 2012

Насколько я понимаю, предел в 255 символов следует считать после преобразования IDNA .

Это связано с тем, что записи DNS имеют этот предел символов, и в общем случае записи DNS могут содержать только буквы, цифры и дефисы ( из Википедии ). Таким образом, DNS-сервер использует версию IDN с Punycode, а не версию Unicode.

0 голосов
/ 24 августа 2016

RFC3492 говорит об одной из особенностей кодирования IDNA:

Эффективное кодирование: отношение длины основной строки к расширенной Длина строки мала. Это важно в контексте доменные имена, потому что RFC1034 ограничивает длину метка домена до 63 символов.

Вот и все. 63 символа - это максимальная длина для любого доменного имени, независимо от того, находится ли оно в IDNA или в ASCII.

...