Когда всемирная паутина впервые появилась, в ней использовался английский язык, и ограниченного набора символов было достаточно для представления названия любого местоположения в сети.
Все доменные имена были составлены из основных букв английского алфавита, плюс цифр 0-9 и символа дефиса. Для представления этих символов использовался базовый 7-разрядный набор символов ASCII.
Некоторое время спустя было признано, что существует потребность в доменных именах, содержащих неанглийские символы - например, европейские буквы с ударениями, буквы из кириллицы, арабского алфавита и т.д.
К сожалению, использование базового набора символов ASCII к тому времени было прочно внедрено в систему, используемую для регистрации доменных имен и перевода их в IP-адреса, и поэтому необходимо было найти метод, при котором эти новые символы могли бы использоваться без необходимости изменять существующую инфраструктуру Интернета.
В соответствии со схемой, известной как IDNA2003 (интернационализация доменных имен в приложениях), доменные имена, содержащие символы вне базового набора ASCII, кодируются как специальные последовательности ASCII перед использованием в Интернете.
Схема кодирования принимает в качестве входных данных доменное имя, состоящее из строки кодовых точек Unicode, которые могут представлять не только символы ASCII, но и огромный диапазон букв с ударением и символов в неанглийских алфавитах.
Все символы верхнего регистра, включая символы с ударением, сначала преобразуются в нижний регистр, а затем строка проверяется на наличие любых символов, которые не могут быть представлены в виде алфавитно-цифровых символов ASCII (или дефисов).
Если ничего не найдено, строка просто используется как есть, без дополнительной обработки, необходимой. Однако, если обнаруживаются символы, отличные от ASCII, строка кодируется для получения строки, совместимой с ASCII, с использованием схемы, известной как punycode.
Преобразование Punycode
Сначала все основные символы ASCII во входной строке собираются вместе без изменения их порядка, затем, если эта строка непустая, добавляется один дефис. За этим следуют некоторые дополнительные символы ASCII, которые генерируются с использованием алгоритма, который кодирует как позиции, так и значения всех символов, отличных от ASCII, из исходной строки.
Наконец, строка имеет префикс 'xn--', который представляет собой специальную последовательность, указывающую на то, что URL-адрес был закодирован с использованием punycode. Эта кодировка применяется индивидуально к каждому разделу полного доменного имени, разделенному символами '.'.
Некоторые примеры кодировок:
Обратите внимание, что кодирование punycode выполняется вашим браузером автоматически при обнаружении HTML-ссылки, содержащей символы, отличные от ASCII . Это позволяет веб-авторам создавать страницы со ссылками, написанными в их собственном наборе символов.
И позволяет браузеру корректно отображать их в адресной строке или предварительном просмотре ссылок, а также предоставлять правильно закодированную версию при запросе страниц из Интернета.
Исключения из правила
В системе IDNA2003 указано, что символ β (Диез-s или Eszett) должен быть переведен в 'ss', а символ ς (используемый в греческом языке, когда в конце слова появляется сигма) должен быть переведен в стандартную сигму σ перед кодированием.
Эти правила были частично вызваны трудностями с преобразованием в нижний регистр - не было эквивалента в верхнем регистре для β (он был записан как 'SS'), а версии в верхнем регистре ς и σ являются одновременно Σ, поэтому преобразование в нижний регистр было бы неоднозначным. Например, SCHLOSS.DE может быть преобразован либо в schloss.de или шлосс.de ведет на два разных веб-сайта.
Поэтому был опубликован новый стандарт IDNA2008, в котором, среди прочего, запрещены все символы верхнего регистра (наряду с некоторыми другими символами, пунктуацией и вариантами символов). Следовательно, не было необходимости запрещать символы β и ς, поэтому они разрешены в соответствии с IDNA2008. Однако это приводит к проблеме.
Если веб-сайт содержит ссылку, скажем, на
http://faß.de тогда в IDNA2003 это было бы переведено на
http://fass .de в то время как в IDNA2008 β запускает преобразование punycode в
http://xn--fa-hia.de это совершенно другой домен. Веб-сайт, содержащий HTML-привязку
<a href="http://faß.de">Faß</a>
будет ссылка на одну страницу под IDNA2003 и другую под IDNA2008.
Поскольку кодирование доменных имен обрабатывается браузером,
это приводит к различиям в поведении в зависимости от того,
следует ли браузер одному стандарту или другому.
На практике большинство поставщиков браузеров, похоже, решили не взламывать ранее существовавшие веб-сайты и продолжают интерпретировать символы β и ς в соответствии с правилами 2003 года, в то время как в других местах они обычно следуют схеме 2008 года.
Однако заметным исключением является Firefox, который кодирует β и ς в соответствии с правилами 2008. Итак, перейдя по ссылке на http://faß.de (или введя его в адресной строке) перейдет к http://xn--fa-hia.de в Firefox, но для http://fass.de в Chrome или Explorer.
Средство проверки мертвых ссылок прагматично поддерживает большинство поставщиков браузеров и интерпретирует ссылку как http://fass.de даже несмотря на то, что это не самый современный стандарт. Если поведение браузера изменится в будущем, средство проверки мертвых ссылок будет соответствующим образом обновлено.
Соображения безопасности
Теоретически, когда одно из этих доменных имен, содержащих символ β или ς, зарегистрировано, регистратор должен предпринять шаги для обеспечения того, чтобы альтернативный домен либо принадлежал тому же клиенту, либо предлагался для регистрации одновременно.
Это помогает избежать проблем безопасности, когда злоумышленник может перенаправлять трафик, предназначенный для подлинного доменного имени, потенциально обслуживая вредоносное ПО с альтернативного веб-сайта.
Однако, даже если один и тот же клиент владеет обоими вариантами доменного имени, ничто не заставляет их представлять одинаковый контент в каждом домене.
IDN также представляют угрозу безопасности из-за гомоглифов - разных символов, которые написаны одинаково, но представлены разными кодовыми точками Unicode.
Например, многие буквы кириллицы (а, с, е, о, р, х и у) выглядят как буквы латинского алфавита, поэтому доменное имя, содержащее эти буквы кириллицы могут выглядеть действующую ссылку на одном месте, тогда как на самом деле она ведет куда-то совсем другое.
Большинство браузеров пытаются защититься от этих атак, отображая версию доменного имени с кодом punycode в строке состояния / адреса всякий раз, когда присутствуют смешанные или неоднозначные наборы символов.
Результаты противоречивы - http://www.pace.com (с использованием латинских символов) отображается, как и ожидалось, в строке состояния как Chrome, так и Firefox. Однако http://www.pace.com (в которых 'pace' записывается с использованием кириллических символов) отображается как punycode в Chrome и Explorer, но не в Firefox, где он выглядит идентично www.pace.com .
Такое поведение может привести к тому, что ссылки приведут пользователя к неожиданному и потенциально вредоносному назначению.
Кодировка URL
Часть URL-адреса, следующего за доменным именем - необязательный путь и название страницы - не кодируется с помощью punycode.
Вместо этого любые символы, не входящие в базовый набор ASCII, сначала преобразуются в последовательности 8-разрядных значений данных с использованием такой кодировки, как UTF-8, а затем эти значения (которые обычно находятся в диапазоне от 128 до 255, все еще за пределами базовых значений ASCII) представляются в виде символа процента, за которым следует значение, преобразованное в двузначную шестнадцатеричную строку.
Так, например, символ Σ со значением 931 в Юникоде преобразуется в два 8-разрядных значения 206, 163, которые затем представляются в шестнадцатеричном формате с кодировкой % CE%A3
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Template not found: /templates/Maxs/feed.tpl