Рекомендации по внедрению в программном обеспечении поддержки интернационализированных доменных имен и адресов электронной почты в домене верхнего уровня .РФ
Настоящий документ содержит технические рекомендации для разработчиков программного обеспечения, в котором планируется внедрение поддержки или уже реализована поддержка интернационализированных доменных имен, зарегистрированных в кириллическом домене верхнего уровня .РФ, и/или адресов электронной почты с их использованием.
Цель документа – обеспечить разработчиков необходимыми данными для корректного внедрения принципов универсального принятия в их программные продукты с учетом специфики доменных имен в ДВУ .РФ и соответствующих адресов электронной почты. Группой управления по универсальному принятию (UASG) разработаны следующие базовые принципы:
- Принятие — получения адреса электронной почты или доменного имени в виде строки символов из пользовательского интерфейса, файла или API, используемого программным обеспечением;
- Проверка (или валидация) – является ли введенная информация допустимой;
- Хранение – правильно ли она сохраняется и извлекается из базы данных (или файла с данными);
- Обработка – в правильном ли виде адреса электронной почты и доменные имена используются программным обеспечением для решения своих непосредственных задач;
- Отображение – правильно ли отображаются в пользовательском интерфейсе программного обеспечения доменные имена и адреса электронной почты
Настоящие рекомендации, разработанные в соответствии с пятью принципами универсального принятия, включают в себя следующее.
I. Для поддержки интернационализированных доменных имен
Рекомендации этого раздела применимы к интернационализированным доменным именам, зарегистрированным в домене верхнего уровня .РФ.
1. Принятие доменного имени
- Передача программному обеспечению доменного имени как пользователем с помощью GUI, так и через API, должна быть возможна как в формате U-метки (Unicode), так и в формате A-метки (Punycode).
- Если передача пользователем доменного имени осуществляется с помощью GUI в формате A-метки, рекомендуется преобразовать его в U-метку средствами предобработки данных.
2. Проверка доменного имени
- Перед проведением рекомендуется привести доменное имя к нижнему регистру и провести нормализацию по форме С (NFC).
- Доменное имя должно соответствовать следующим требованиям (включая требования «Правил регистрации доменных имен в доменах .RU и .РФ»):
- Доменное имя в зоне РФ может содержать дефис, цифры или символы русского алфавита: (а-я, А-Я, 0-9, -);
- Доменное имя может начинаться и заканчиваться цифрой или буквой, не может дефисом;
- Перед проверкой длины доменное имя требуется преобразовать из U-метки в A-метку;
- Доменное имя может иметь длину домена второго уровня от 2 до 63 символов в A-метке;
- Доменное имя может иметь длину домена третьего и далее уровней от 1 до 63 символов в A-метке;
- Общая длина доменного имени может быть от 11 до 255 символов в А-метке.
- В доменном имени не допускаются упрощающие преобразования, например преобразование буквы «ё» в букву «е».
- Рекомендуется проверять существование доменного имени: делегирование проверяется при помощи DNS-запроса, наличие регистрации - при помощи сервиса WHOIS.
3. Хранение доменного имени
- Доменное имя должно храниться в БД или в файлах в виде U-метки в кодировке UTF-8.
- Доменное имя может храниться в виде A-метки в дополнение к U-метке, при этом необходимо проверять соответствие обеих меток при изменении одной из них.
4. Обработка доменного имени
- Любые операции с доменными именами должны производиться в кодировке UTF- 8.
5. Отображение доменного имени
- Доменное имя должно отображаться в графическом интерфейсе программного обеспечения в виде U-метки.
- Доменное имя может отображаться в виде А-метки только в том случае, когда оно идет в дополнение к соответствующему доменному имени в виде U-метки.
- При отображении ошибок, связанных с доменным именем, рекомендуется выделять уровень доменного имени, с которым связана ошибка.
6. Оформление кода
- В имена функций и глобальных переменных программного обеспечения, используемых для работы с доменными именами в домене .РФ, рекомендуется добавлять idn_rf.
II. Для поддержки интернационализированных адресов электронной почты
Рекомендации этогораздела применимы к интернационализированным адресам электронной почты, имеющим в своем составе доменные имена в домене верхнего уровня .РФ.
1. Принятие адреса электронной почты
- Доменная часть адреса электронной почты должна передаваться в соответствии с п. 1 раздела I.
- Локальная часть адреса электронной почты должна передаваться только в виде U- метки.
2. Проверка адреса электронной почты
- Доменная часть адреса электронной почты должна проверяться в соответствии с п. 2 раздела I.
- Перед проведением проверок рекомендуется привести локальную часть адреса электронной почты к нижнему регистру и провести нормализацию по форме С (NFC).
- Локальная часть адреса электронной почты должна соответствовать следующим требованиям:
- Локальная часть адреса электронной почты может содержать цифры (от 0 до 9);
- Локальная часть адреса электронной почты может содержать либо только латинские символы (a-z, A-Z), либо только символы русского алфавита (а-я, А-Я), но не может содержать латинские и русские символы одновременно;
- Длина локальной части адреса электронной почты может быть от 1 до 64 символов;
- В локальной части адреса электронной почты не допускаются упрощающие преобразования, например буквы «ё» в букву «е».
- В локальной части адреса электронной почты не рекомендуется использовать специальные символы, за исключением точки (.), нижнего подчеркивания (_) и дефиса (-).
- Локальную часть адреса электронной почты не рекомендуется начинать и заканчивать любым специальным символом или иметь в ней два специальных символа подряд.
3. Хранение адреса электронной почты
- Доменная часть адреса электронной почты должна храниться в соответствии с п. 3 раздела I
- Локальная часть адреса электронной почты должна храниться в виде U-метки в кодировке UTF-8.
4. Обработка адреса электронной почты
- Любые операции с адресами электронной почты рекомендуется производить в кодировке UTF-8.
5. Отображение адреса электронной почты
- Доменная часть адреса электронной почты должна отображаться в соответствии с п. 5 раздела I.
- Локальная часть адреса электронной почты должна отображаться в виде U-метки.
- При отображении ошибок, связанных с адресом электронной почты, рекомендуется выделять локальную часть адреса, если ошибка в ней, или уровень доменного имени, если ошибка в доменной части.
6. Оформление кода
- В имена функций и глобальных переменных программного обеспечения, обеспечивающих работу с адресами электронной почты, рекомендуется добавлять eai_rf.
III. Список использованных источников
Настоящий документ разработан на основе материалов приведенных ниже источников:
- Introduction to Universal Acceptance,
https://uasg.tech/wp-content/uploads/documents/UASG007-en-digital.pdf
- Email Address Internationalization – Technical Perspective,
https://uasg.tech/wp-content/uploads/documents/UASG019B-en-digital.pdf
- Universal Acceptance Readiness Framework,
https://uasg.tech/wp-content/uploads/documents/UASG026-en-digital.pdf
- RFC 5321 - Simple Mail Transfer Protocol,
https://tools.ietf.org/html/rfc5321
- RFC 5322 - Internet Message Format,
https://tools.ietf.org/html/rfc5322
- RFC 1035 - Domain Names - Implementation And Specification,
https://tools.ietf.org/html/rfc1035
- RFC 3492 - Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications
https://www.ietf.org/rfc/rfc3492.txt
- Стандарт Internationalized Domain Names for Applications
https://www.ietf.org/rfc/rfc5890.txt
https://www.ietf.org/rfc/rfc5891.txt
https://www.ietf.org/rfc/rfc5892.txt
https://www.ietf.org/rfc/rfc5893.txt
https://www.ietf.org/rfc/rfc5894.txt
https://www.ietf.org/rfc/rfc5895.txt
- Стандарт EAI, интернационализации электронной почты
https://tools.ietf.org/html/rfc6530
https://tools.ietf.org/html/rfc6531
https://tools.ietf.org/html/rfc6532
https://tools.ietf.org/html/rfc6533
- Правила регистрации доменных имен в доменах .RU и .РФ
https://cctld.ru/files/pdf/docs/rules_ru-rf.pdf
- Поддерживаю.РФ - проект развития экосистемы поддержки доменных имен и почтовых адресов на национальных языках
https://поддерживаю.рф/
- Группа управления по универсальному принятию Universal Acceptance Steering Group, UASG
https://uasg.tech/
- Юникод консорциум
https://home.unicode.org/
- Формы нормализации Юникод
http://www.unicode.org/reports/tr15/