Почему / как браузер решает, что goes.net переходит на xn--n3h.net

Если мы введем в Firefox или Chrome

http://☃.net/

Это берет нас к

http://xn--n3h.net/

Который является зеркалом http://unicodesnowmanforyou.com/

Что я не понимаю, так это то, по каким правилам юникод-снеговик может декодировать xn--n3h, это не похоже на UTF-8 или urlencoding.

Я думаю, что нашел подсказку во время осмотра в python3, потому что:

>>> '☃'.encode('punycode')
b'n3h'

Но я до сих пор не понимаю xn-- часть. Как интернационализируются доменные имена, каков стандарт и где этот материал задокументирован?

1 ответ

Решение

Он использует схему кодирования, называемую Punycode (как вы уже обнаружили из проведенного вами тестирования Python), способную представлять символы Unicode в формате только ASCII.

Каждая метка (разделена точками, поэтому get.me.a.coffee.com имеет пять меток), который содержит символы Unicode, кодируется в Punycode и имеет префикс строки xn--,

Кодирующая метка сначала копирует все символы ASCII, а затем добавляет закодированные символы Unicode. Символы Юникода всегда после финала - в метке, так что один добавляется после символов ASCII, если это необходимо.

Более подробную информацию можно найти на этой странице на сайте w3 и в RFC 3987. Подробнее о том, как Punycode на самом деле кодирует метки, см. На странице Википедии.

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