Інструменти розробника · URL енкодер & декодер
Punycode проти відсотків-encoding: як не-ASCII домени та доріжки обробляються
· Підземелля
Опубліковано ToolAcre · Редакція журналу
інтернаціоналізація punycode виворітна обробка

Р URL з не-ASCII ім'я та не-ASCII Шлях використовує два абсолютно різні кодування. Цей пост пояснює IDNA і punycode для хосту, проценти за все інше, і чому спліт існує.
Адреса, яка показує 'münchen.example- в одному браузері і "xn--mnchen-3ya.example- в іншому — один хост, два заклинання
Місто Мюнчен з'являється в німецькому доменному імені. У адресному рядку браузера можна побачити мюnchen.example виводиться нормально. Скопіювати адресу з іншого додатка, і вона з'являється як xn--mnchen-3ya.example, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ASCII-тільки рядок, що виглядає нічого не схожого на німецький текст. Молода URL, два заклинання, як абсолютно діє. Не неправильно, вони представляють той же домен, використовуючи всі різні набори символів. Відмінність відображає фундаментальний обмеження на те, як DNS працює і як інтернет-інфраструктура очікується передається в хостові імена.
Відрізки шляху, як /café/ need code, але використовувати різні системи. Не-ASCII é стає %C3%A9 в доріжок. Чому різниця? DNS обмеження вимагають punycode для імен хост.
Чому не можна використовувати відсоткову обробку — DNS мітки, дозволені символи та обмеження довжини
DNS етикетки, окремі сегменти хоста, відокремлені точками, мають дуже суворі правила. Вони можуть містити лише ASCII літери, цифри, гіфени та низи. У них є обмеження довжини: кожен етикеток може бути на більшості 63 не може перевищувати окети, а повне ім’я хостів 255 октети. Це жорсткі обмеження з DNS протокол, який визначили десятки років тому перед міжнародними доменними іменами, навіть поняття. Не може працювати над іменами, оскільки отриманий рядок, ймовірно, перевищить ліміти етикеток на більш тривалий термін.
Більш важливо, DNS - глобальна система, що працює маршрутизаторами та серверами по всьому світу. Не всі вони розуміють UTF-8 або Unicode. Рівно-кодований характер, як %C3%A9, як і раніше, три ASCII символи, тому він підходить DNS обмеження. Але це означає, що кожен зовнішній вигляд має напроцентувати і декодувати на шляху, додаючи складність до самого протоколу. Для хостійкої використовуються кращі рішення.
IDNA і punycode в контурі — хн-- префікс і алгоритм завантажувального шва, описаний якісно
IDNA, Ім'я та ім'я Домена в специфікації додатків, вирішує проблему ім'я хостом за допомогою кодування не-ASCII доменні імена в ASCII , що DNS може оброблятися. Кодування, що використовується, називається punycode, алгоритм стиснення, який перетворює текст Unicode в ASCII за допомогою префікса xn- сліду за допомогою завантажувального списку. Алгоритм є детермінантність: münchen завжди стає xn-mnchen-3ya кожного разу. Будь-якийASCII ім'я користувача необхідно перевести цей шлях до DNS може статися дозвіл.
ХН- префікс сигналів для DNS і до IDNA-програмне програмне забезпечення, яке такі символи є punycode, не лально ASCII листи. Домен example.xn--mnchen-3ya.com чи є на прикладі.münchen.com по IDNA-програмне програмне забезпечення. Утиліта-коду є тільки ASCII літери, цифри та гіфени, тому він добре вписується в DNS етикетки без проблем. Алгоритм стискає не-ASCII інформація в цій ASCII представництво.
Шляхи, питання та фрагменти, які залишаються на відсотках — UTF-8 байти до %XX, як в іншому місці
Все інше в URL— шлях, рядок запиту, фрагмент — замість того, щоб отримати доступ до відсотків. Не-ASCII символ спочатку перетворений на UTF-8 байтів, потім кожен байт написаний як %H, де HH є шістнадцятковим. Шлях /café / стає /caf%C3%A9/. Накладний рядок ?name=josé стає ?name=jos%C3%A9. Прозора обробка є стандартним в усьому світі на сайті: в HTTP uRL-адреси запиту, в HTML форм, в API. Не потрібно спеціальне обслуговування DNS або маршрутизатори.
Непрозорі і непристойні символи, які можна сміливо представити. Простір стає %20, що з'являється всередині значення (якщо вона повинна з'явитися всередині значення) %2Fі так далі. Схема послідовна і універсальна. Не використовується для хостимерів, тому що DNS не розуміє URL-адреси або відсотків-кодування; він тільки розуміє ASCII етикетки.
Приклад роботи: один URL з обох — хост перетворений на пунікод, шлях процентно-кодований, боковий
Зроби URL "https://münchen.example/café?city=münchen". Ім'я користувача münchen повинен бути переведений в пунікод перед DNS шукаємо: https://xn--mnchen-3ya.example/café?city=münchen. Але чекайте — шлях і кварка також не маютьASCII. Перетворення цих занадто: https://xn--mnchen-3ya.example/caf%C3%A9?city=m%C3%BCnchen. Тепер ім'я хостового коду, шлях і запит на запит. У браузері відображається оригінальна версія Unicode для зчитування HTTP запит здійснює закодовано версію.
У URL інструмент для загартування та декодера, вставте шлях, що містить не-ASCII текст і порівняти режим однозначного (просто шляху) з режимом вади (повний) URL... Інструмент показує, що ви надаєте %-кодований результат для шляху. Ім'я користувача, однак, вимагає окремого перетворення пунікоду; більшість інструментів кодування не керують, що в режимі реального часу, тому читати його з документації інструментів.
Хомографічні атаки і чому браузери іноді показують пунікод — причини безпеки за правилами відображення
Знаний актор може зареєструвати домен за допомогою кириличних букв, які виглядають візуально ідентично латинським літерам, як "https://xn--80akhbyknj4f.example" (Кірилична версія "example.example" у punycode". Якщо браузер відображає його декодування як кириличний текст, користувачі не можуть помітити різницю. Щоб запобігти нападам гомографа, браузери іноді показують версію пунікоду замість його розшифрування. Виявляється попередження: це доменне ім’я, або в основному, не-ASCIIви не можете розпізнати символи.
Мистецтво URL encoder & decoder є інструментом для кодування та декодування, не для оцінки безпеки. Якщо ви працюєте з міжнародними доменними іменами, будь ласка, вкажіть, що представлення пропонента є те, що мережа бачить.
Що це не криється — працює алгоритм у форматі PDF IDNA 2003 версус 2008 ● абзац
IDNA з’явився кілька версій за час: IDNA 2003 і IDNA 2008 ручка певних випадків, по-різному, особливо, по нормалізації та які символи Unicode дозволені за специфікацією. Деякі старі системи все ще використовують IDNA 2003 при цьому інші мігровані IDNA 2008 для кращого дотримання. Відмінність, що значно відрізняється, якщо ви є будівельними системами, які повинні бути сумісні з різними версіями. Перевірте вимоги системи, які завжди ретельно завжди відповідають вимогам.
Punycode використовує стиснення завантажувального елемента. Впровадження існують на мовах загального характеру, але перевірте IDNA політика з системою хоста. Тестування та відображення поведінки, а не припустимо.
Поруч: два кодування для двох робочих місць — як працює URL енкодер і декодер ручить відсоткові частини, і чому відсотків-encoder є неправильним інструментом для ім'я хоста
Хостимам потрібен пунікод, тому що DNS - старий протокол, який тільки розуміє ASCII етикетки та мають строгі обмеження довжини та характеру. Шляхи, запити та фрагменти використовують проценти, оскільки він універсальний на сайті і не має цих обмежень. Вони є двома окремими рішеннями для двох абсолютно різних проблем. Коли ви зіткнулися з не-ASCII URL, ім'я користувача отримує конвертацію punycode спочатку, потім решта використовує процентну обробку.
Для більшості завдань розробки, вашої бази даних або бібліотеки автоматично керує перетворення за сценаріями. Але розуміння того, чому два різних коди існують запобігає згубленню при розведенні міжнародних URL або реалізації власних власних URL успішно працює з кодом.