Пять критериев универсального принятия: «Принятие»

Универсальное принятие — состояние, когда все интернет-ориентированные приложения, устройства и системы правильно и единообразно принимают, проверяют, хранят, обрабатывают и отображают все корректные доменные имена и адреса электронной почты.

Существует пять критериев реализации универсального принятия в программном обеспечении. В серии статей мы разберем каждый из них. В этой статье расскажем о критерии «Принятие».

Что означает критерий «Принятие»

Принятие — это процесс получения доменного имени или адреса электронной почты от какого-то пользовательского интерфейса или API, который используется ПО (приложением или интернет-сервисом).

Приложения и сервисы должны принимать доменные имена и адреса электронной почты двух видов:

  1. те, которые ввели через пользовательские интерфейсы;
  2. те, которые получили из других приложений и сервисов через API.

Категории данных

Могут использоваться следующие виды интернет-идентификаторов: New gTLD, IDN или EAI.

New gTLD — это новые домены общего пользования верхнего уровня. Такие домены стали доступны в интернете с 2013 года. Они могут состоять из латинских символов, иметь длину более трех символов (что отличает их от традиционных gTLD, таких как .com, .net, .org), а также из символов национальных алфавитов (IDN New gTLD). Регистрация доменов второго уровня в этих зонах обычно доступна всем пользователям или только представителям определенного сообщества (зависит от правил регистрации конкретного gTLD). К ним относятся домены, например, .moscow, .tatar, .online, .photography, .москва, .рус и другие.

IDN (Internationalized Domain Names) — это интернационализованные доменные имена (верхнего, второго и ниже уровней), которые содержат символы национальных алфавитов. IDN-домены верхнего уровня могут быть как страновыми (IDN ccTLD), так и доменами общего пользования (IDN gTLD).

Регистрация интернационализированных доменов второго уровня осуществляется пользователями в соответствии с правилами регистрации, которые установлены для каждой из таких зон. Такие домены верхнего уровня стали доступны в интернете начиная с 2010 года. Например, .рф, .бел, .հայ, .中国 , .дети. 

EAI (Email Address Internationalization) — это интернационализационные адреса электронной почты. Интернационализация адреса позволяет использовать символы Unicode в адресе электронной почты — в имени домена (то есть IDN-домен), локальной части до знака @ или обоих компонентах.

Например, адрес электронной почты может выглядеть как info@пример.com, info@поддерживаю.рф или инфо@поддерживаю.рф. Стандарт EAI был разработан IETF в 2012 году.

Рекомендации по принятию доменных имен

Основные рекомендации по реализации критерия принятия доменных имен касаются:

  1. полей для ввода;
  2. кодировок Unicode и ASCII;
  3. форматов UTF.

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

ASCII — это стандарт кодирования символов, в котором каждой букве, цифре или знаку соответствует семиразрядный двоичный код. Таблица ASCII состоит из латинских букв, цифр, знаков препинания и управляющих символов.

Unicode — стандарт кодирования символов, который охватывает большинство систем письма и языков, имеющих письменность.

UTF — формат преобразования данных Unicode. Это способ представления кодов символов Unicode в виде потока байтов, то есть способ кодирования Unicode-символов.

Что делать с полем для ввода

Поля ввода должны быть соответствующего размера, чтобы принять все допустимые входные данные. Длина доменного имени может потребовать до 255 байт. Кроме доменного имени, адрес электронной почты содержит локальную часть (перед знаком @) длиной до 64 байт. Именно поэтому общая длина может достигать 320 байт.

Так выглядит поле для ввода email-адреса на сайте Поддерживаю.РФ

Какой из форматов выбрать: Unicode или ASCII

При использовании Unicode для кодировки оригинального набора символов доменного имени создается U-метка. Совместимый с ASCII эквивалент называется A-меткой.

Программное обеспечение должно принимать как A-метки, так и U-метки.

Если передача пользователем доменного имени осуществляется с помощью GUI в формате A-метки, желательно преобразовать его в U-метку средствами предобработки данных.

При этом для прямого и обратного преобразования U-меток в A-метки нужно использовать алгоритм Punycode, который определен стандартом RFC 3492.

Сами данные должны приниматься в любом виде — вне зависимости от того, нормализованы они или нет. Нормализация данных будет происходить на этапе проверки.

Важно. Элементы пользовательского интерфейса должны поддерживать как ASCII, так и Unicode. Размер метки интернационализированного доменного имени должен измеряться в ASCII-представлении, то есть U-метка должна быть преобразована в А-метку по алгоритму Punycode, а затем должен проверяться ее размер — до 63 символов на одну метку и до 255 символов на всё доменное имя.

Какой формат UTF нужен

Приложениям и сервисам рекомендуется распознавать доменные имена и адреса электронной почты в кодировке UTF-8.

IDN-домен может вводиться и отображаться с использованием оригинального набора символов (U-метка) или с использованием варианта ASCII (A-метка). Главное, чтобы формат ASCII поддерживал обратную совместимость. Например, рф и xn--p1ai.

При использовании UTF-8 каждая кодовая точка Unicode кодируется в виде последовательности от одного до четырех байт. Это определено в RFC 3629.

Подробнее о рекомендациях можно прочитать на нашем сайте по этой ссылке. Также существуют рекомендации Российской рабочей группы по универсальному принятию — они касаются всех российских кириллических доменов верхнего уровня. Ознакомиться с ними можно здесь.

Рекомендации по принятию адресов электронной почты

В отличие от доменной адресации, где есть четкая DNS-иерархия, в почтовой адресации всё зависит от разрозненных почтовых серверов с их собственной политикой настроек.

Передача программному обеспечению доменного имени в адресе электронной почты как пользователем с помощью GUI, так и через API должна быть доступна в двух форматах: U-метки (Unicode) и A-метки (Punycode).

Важно. Локальная часть адреса электронной почты должна передаваться только в Unicode. По стандарту EAI преобразование локальной части в формат Punycode не предусмотрено, поэтому такой адрес (с ASCII-символами в локальной части) будет являться отдельным адресом электронной почты.

Размер локальной части адреса электронной почты измеряется в Unicode-представлении, в формате UTF-8, и не должен превышать 64 байт.

Допустимые форматы адресов электронной почты с примерами:

Как проводить тестирование критерия «Принятие»

Тестирование состоит из нескольких этапов проверки:

  1. Проверка принятия любого IDN-домена в кодировке UTF-8, в виде A-метки кодировки ASCII или в смешанном варианте, когда одна метка доменного имени использует символы Unicode или представлена в UTF-8 формате, а другая — в ASCII или в A-метке. Например, xn--e1afmkfd.example.com.
  2. Проверка принятия любого New gTLD домена на латинице длиной от трех и более символов. 
  3. Проверка принятия любого EAI-адреса электронной почты в кодировке UTF-8.

ПО удовлетворяет требованиям универсального принятия, если все его значимые функциональные элементы успешно проходят необходимые тесты:

  1. Тест принятия доменных имен. Должны приниматься все идентификаторы в кодировках UTF-8 и в кодировке ASCII. Например, IDN-домен тест.рф в идентификаторе можно задать в виде А-метки xn-- e1aybc.xn--p1ai.
  2. Тест принятия email-адресов. Доменная часть адреса должна тестироваться по правилам принятия доменных имен, а локальная — только в Unicode. В формате Punycode проводить тесты нельзя, потому что адрес электронной почты с локальной частью в таком формате должен восприниматься как отдельный самостоятельный адрес.