Руководство по безопасности браузеров (Browser Security Handbook). Глава 1
1. Унифицированный указатель ресурса ( URL )
2. Unicode в Url
Некоторые технологии, связанные с перемещением веб-контента и Url-адресов, не имеют особого набора символов, определенных соответствующим RFC. В RFC-3986 сказано: «На местном или региональном уровне, а также с усовершенствованием технологии, пользователи могут воспользоваться возможностью применения широкого диапазона символов; такое использование не определенно в настоящей спецификации».Тот же пренебрежительный подход принят в спецификации http-заголовка.
В результате, в контексте web-страницы, любой старший бит пользовательского ввода, может и должен быть использован как %nn-последовательности, но нет конкретных указаний о том, как перекодировать введенный пользователем адрес в собственную кодовую страницу системы, общаясь с другой стороной, которой не может передать эту кодовую страницу. Системе, которая использует кодировку UTF-8 и получает URL, содержащий Unicodeв пути, соответствует исходная последовательность 0xC4 0x85.Однако, при отправке на сервер, который использует ISO-8859-2, исправленное значение должно послать 0xB1(или, в качестве альтернативы, должна быть включена дополнительная информация о кодировке на клиенте, чтобы осуществить преобразование на стороне сервера). На практике же, большинство браузеров, по умолчанию, отправляют данные в кодировке UTF-8 на любой, введенный вручную в поле URL, текст, и используют данную кодировку страницы на всех последующих ссылках.
Еще одно ограничение Url прослеживается в DNS. RFC 1035 позволяет использовать в метках DNS только символы A-Z a-z 0-9и «.», использующуюся в качестве разделителя; распознаватель[4] позволяет использовать дополнительно подчеркивание «_»в DNS-именах, что нарушает стандарт. С развитием Всемирной паутины, появилась необходимость в именах хостов использовать символы нелатинского алфавита. И использование %nn-кодирования это не альтернатива, потому что %,как такового, не было в списке.
Чтобы решить эту проблему, RFC 3490 изложила довольно надуманную схему кодирования, которая допускает Unicode-символы хранить в DNS-метках, и RFC 3492 , описывающий конкретные реализации в DNS-метрике, часто называемый « Punycode », который обозначается следующим образом:
xn--[US-ASCII-часть]-[закодированные данные в Unicode]
Браузер, поддерживающий Punycode, преобразовывает неизвестные символы, содержащиеся в доменном имени, в последовательность ASCII -символов, а затем выполняет обычный DNS-поиск в кодированной строке.
Ниже показан пример преобразования в Punycode:
href="http://www.r
