Кратко
- RFC 3490 оставила DNS в ASCII и поместила IDNA в приложение.
ToASCIIмогла отвергнуть метку, аToUnicodeникогда не возвращала ошибку: при сбое любого шага она выдавала исходный ввод. - Поэтому видимая строка не доказывала допустимость IDNA, принятие реестром, запись в зону, разрешение, проверку DNSSEC или контроль над именем. Для каждой ступени требовалось отдельное свидетельство.
Фраза «ToUnicode never fails» звучит как обещание универсальной правильности. В RFC 3490 она означала лишь, что функция отображения всегда вернёт последовательность. Если подготовка, декодирование или обратная проверка не удавались, операция немедленно возвращала первоначальный ввод. Приложение сохраняло то, что можно показать, но протокол не объявлял это допустимым международным именем.
Такое решение вытекало из архитектуры 2003 года. IDNA не меняла DNS-серверы, резолверы и формат сообщений. Она целиком работала внутри приложения, как тонкая прокладка между интерфейсом Unicode и исторической инфраструктурой ASCII. Международным становился край системы, а DNS продолжала выполнять точное сопоставление.
Область применения задавалась понятием «слот доменного имени»: QNAME, аргумент библиотечной функции, доменная часть адреса в заголовке письма, host в URI. Упоминание домена в обычном тексте само по себе слотом не становилось. Правила включал контекст использования, а не внешний вид строки.
На пути к DNS ToASCII обязана была уметь отказать. Она обрабатывала каждую метку отдельно. Не-ASCII ввод проходил Nameprep; приложение могло потребовать традиционные правила букв, цифр и дефиса; не-ASCII последовательность с зарезервированным префиксом отвергалась; затем применялся Punycode, добавлялся xn--, а длина проверялась на диапазон от одного до 63 кодовых пунктов. Сбой любого шага означал отказ. Если не проходила одна метка, всё имя нельзя было использовать как IDN.
На пути к читателю у ToUnicode была другая задача. Она распознавала и удаляла ACE-префикс, декодировала Punycode, сохраняла результат и снова применяла ToASCII. Только когда вновь созданная ASCII-форма совпадала с сохранённым вводом без учёта регистра ASCII, возвращалась декодированная Unicode-форма. Полный круг подтверждал соответствие представлений.
Если круг не замыкался, промежуточный результат не становился допустимым ради удобства. Возвращался оригинал. RFC 3490 отдельно указывала: если после ToUnicode метка по-прежнему начинается с ACE-префикса, это не допустимая ACE-метка и она не эквивалентна промежуточным Unicode-строкам. Возвращённое значение подтверждало работу экрана, а не приём имени.
Отсюда следует лестница доказательств. Возможность нарисовать строку не означает прохождение ToASCII. Успешное преобразование не обязывает реестр принять метку по его языковым правилам. Принятие не доказывает внесение A-label в зону. Ответ DNS может быть создан wildcard-записью. DNSSEC аутентифицирует данные под подписанным ASCII-именем, но не Unicode-представление и не человеческое толкование. Разрешение также не доказывает владение или ожидаемую личность.
Стандарт не обещал решить язык. DNS оставалась системой точного совпадения. Похожие символы, альтернативные написания, традиционные и упрощённые китайские знаки или языковые эквиваленты не сливались автоматически. Администраторы зон могли вводить дополнительные ограничения. Кодирование обеспечивало совместимость, но не распределяло права на имена.
RFC 4690 позже описала трудности визуального сходства, политики регистрации, обновлений Unicode и перехода. RFC 5890 и RFC 5891 в 2010 году ввели A-label и U-label и явно развели регистрацию и поиск. При регистрации можно требовать точного совпадения форм и отвергать расхождение; поиск допускает больше, но всё равно проверяет. Успешное сравнение не означает допустимость — это RFC 5891 сформулировала прямо.
RFC 5895 вынесла отображения пользовательского ввода в локальную обработку до общего протокола. Это соответствует принципу минимальной начальной спецификации Хэн Лу: глобальный договор фиксирует только необходимое для совместимости, а язык, ввод, показ и регистрационная политика остаются у тех, кто располагает контекстом. Координация становится надёжнее, когда не присваивает решения соседних слоёв.
Полная схема RFC 3490 была заменена, однако её асимметрия остаётся полезной. Функция, которая всегда возвращает значение, хорошо сохраняет наблюдаемость интерфейса. Она опасна как оракул допустимости. ToUnicode давала материал для показа; ToASCII могла дать приемлемое представление для старого канала. Регистрация, существование, ответ, аутентификация и контроль оставались отдельными событиями.
Источники
- RFC 3490
- Текст RFC 3490
- Запись RFC Editor
- Запись IETF Datatracker
- История IETF
- Исправления RFC 3490
- RFC 3491
- RFC 3492
- RFC 3454
- RFC 1034
- RFC 1035
- RFC 4690
- RFC 5890
- RFC 5891
- RFC 5892
- RFC 5893
- RFC 5894
- RFC 5895
- Репозиторий практик IDN IANA
- Хэн Лу о минимальной начальной спецификации
- Хэн Лу об уровнях реальности
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
