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

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

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

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

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

Где я это потерял

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

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

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

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

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

Вопрос в том:

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

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

3 ответа

Решение

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

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

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

По сути, для введения интернационализированных доменных имен (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), только подтверждает это максимальное ограничение символов.

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

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

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

Другие вопросы по тегам