13-10-2023
Единый указатель ресурсов (англ. Uniform Resource Locator, URL) — единообразный локатор (определитель местонахождения) ресурса. Ранее назывался Universal Resource Locator — универсальный указатель ресурса. URL служит стандартизированным способом записи адреса ресурса в сети Интернет.
URL был изобретён IETF и её подразделениями.
Изначально локатор URL был разработан как система для максимально естественного указания на местонахождения ресурсов в сети. Локатор должен был быть легко расширяемым и использовать лишь ограниченный набор ASCII‐символов (к примеру, пробел никогда не применяется в URL). В связи с этим, возникла следующая традиционная форма записи URL:
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
В этой записи:
Пример: ?параметр_1=значение_1&параметр_2=значение_2&параметр3=значение_3
Тим Бернерс-Ли признаёт, что символ двойной косой черты в структуре URL является избыточным[2].
Общепринятые схемы (протоколы) URL включают:
Экзотические схемы URL:
Схемы URL в браузерах:
Появление адресов URL стало существенным нововведением в Интернете. Однако с момента его изобретения и по сей день стандарт URL обладает серьёзным недостатком — в нём можно использовать только ограниченный набор символов, даже меньший, нежели в ASCII: латинские буквы, цифры и лишь некоторые знаки препинания. Если мы захотим использовать в URL символы кириллицы, или иероглифы, или, скажем, специфические символы французского языка, то нужные нам символы должны быть перекодированы особым образом.
В русскоязычной Википедии ежедневно приходится видеть пример кодирования URL, поскольку русский язык использует символы кириллицы. Например, строка вида:
https://ru.wikipedia.org/wiki/Микрокредит
кодируется в URL как:
https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D1%80%D0%B5%D0%B4%D0%B8%D1%82
Такое преобразование происходит в два этапа: сначала каждый символ кириллицы кодируется в Юникоде (UTF-8) в последовательность из двух байтов, а затем каждый байт этой последовательности записывается в шестнадцатеричном представлении:
М → D0 и 9C → %D0%9C и → D0 и B8 → %D0%B8 к → D0 и BA → %D0%BA р → D1 и 80 → %D1%80, и т. д
Перед каждым таким шестнадцатеричным кодом байта, согласно спецификации URL[4], ставится знак процента (%) — отсюда даже возник английский термин «percent‐encoding», обозначающий способ кодирования символов в URL и URI.
Иные распространённые, но недопустимые в URL символы кодируются в таком соответствии:
! | " | #[5] | % | &[5] | ' | * | ,[5] | :[5] | ;[5] | < | =[5] | > | ?[5] | [ | ] | ^ | ` | { | | | } | <пробел> |
%21 | %22 | %23 | %25 | %26 | %27 | %2a | %2c | %3a | %3b | %3c | %3d | %3e | %3f | %5b | %5d | %5e | %60 | %7b | %7c | %7d | %20[6] |
Кодирование параметров в Internet Explorer и старом Firefox происходит несколько иначе.[7]
В некоторых случаях URL формируется с использованием кодирования Base58[8].
Поскольку такому преобразованию подвергаются буквы всех алфавитов, кроме базовой латиницы, то URL со словами подавляющего большинства языков может стать нечитаемым для человека.
Это всё входит в противоречие с принципом интернационализма, провозглашаемого всеми ведущими организациями Интернета, включая W3C и ISOC. Эту проблему призван решить стандарт IRI (англ. Internationalized Resource Identifier) — международных идентификаторов ресурсов, в которых можно было бы без проблем использовать символы Юникода, и которые поэтому не ущемляли бы права других языков. Хотя заранее сложно сказать, смогут ли когда‐либо идентификаторы IRI заменить столь широко используемые URL (и URI в целом).
Ещё один кардинальный недостаток URL состоит в отсутствии гибкости. Ресурсы во Всемирной паутине и Интернете перемещаются, а ссылки в виде URL остаются, указывая на уже отсутствующие ресурсы. Это особенно болезненно для электронных библиотек, каталогов и энциклопедий. Для решения этой проблемы были предложены постоянные локаторы PURL (англ. Persistent Uniform Resource Locator). В сущности это те же URL, но они указывают не на конкретное место расположения ресурса, а на запись в базе данных PURL, где, в свою очередь, записан уже конкретный URL‐адрес ресурса. При обращении к PURL сервер находит нужную запись в этой базе данных и перенаправляет запрос уже на конкретное местоположение ресурса. Если адрес ресурса меняется, то нет нужды исправлять все бесчисленные ссылки на него — достаточно лишь изменить запись в БД. В настоящий момент эта идея не стандартизирована и не имеет широкого распространения.
URL.