URL

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Uniform Resource Locator, сокр. URL (произносится [ю-ар-эл], [ˌjuː ɑːr ˈel]; с англ. — «единообразный указатель местонахождения ресурса») — адрес ресурса в сети Интернет. Стандарт URL регулируется организацией IETF. URL как формат адреса ресурса был изобретён Тимом Бернерсом-Ли в 1990 году в стенах Европейского совета по ядерным исследованиям, и стал фактической основой для создания Всемирной паутины. Сейчас URL позиционируется как часть более широкой системы адресации URI и регулируется документом, определяющим URI (RFC 3986).

В России употребление URL в официальных документах регулируется ГОСТ Р 7.0.5-2008 «Библиографическая ссылка. Общие требования и правила составления».

История[править | править код]

URL был изобретён Тимом Бернерсом-Ли в 1990 году в стенах Европейского совета по ядерным исследованиям (фр. Conseil Européen pour la Recherche Nucléaire, CERN) в Женеве, Швейцария. URL стал фундаментальной инновацией в Интернете. Изначально URL предназначался для обозначения мест расположения ресурсов (чаще всего файлов) во Всемирной паутине. Сейчас URL применяется для обозначения адресов почти всех ресурсов Интернета. Стандарт URL закреплён в документе RFC 3986. Сейчас URL позиционируется как часть более общей системы идентификации ресурсов URI, сам термин URL постепенно уступает место более широкому термину URI. Стандарт URL регулируется организацией IETF и её подразделениями.

В 2009 году Тим Бернерс-Ли высказал мнение об избыточности двойного слеша // в начале URL, после указания сетевого протокола[1][2].

Структура URL[править | править код]

URL был разработан как система для максимально естественного указания на местонахождения ресурсов в сети. Локатор должен был быть легко расширяемым и использовать лишь ограниченный набор ASCII‐символов (к примеру, в URL никогда не применяется пробел). В связи с этим возникла следующая традиционная форма записи URL:

<схема>:[//[<логин>[:<пароль>]@]<хост>[:<порт>]][/<URL‐путь>][?<параметры>][#<якорь>]

В этой записи:

схема[править | править код]
схема обращения к ресурсу; в большинстве случаев имеется в виду сетевой протокол
логин[править | править код]
имя пользователя, используемое для доступа к ресурсу
пароль[править | править код]
пароль указанного пользователя
хост[править | править код]
полностью прописанное доменное имя хоста в системе DNS или IP-адрес хоста в форме четырёх групп десятичных чисел, разделённых точками; числа — целые в интервале от 0 до 255.
порт[править | править код]
порт хоста для подключения
URL-путь[править | править код]
уточняющая информация о месте нахождения ресурса; зависит от протокола.
параметры[править | править код]
строка запроса с передаваемыми на сервер (методом GET) параметрами. Начинается с символа ?, разделитель параметров — знак &. Пример: ?параметр_1=значение_1&параметр_2=значение_2&параметр3=значение_3
якорь[править | править код]
идентификатор «якоря»  (англ.) с предшествующим символом #. Якорем может быть указан заголовок внутри документа или атрибут id  (англ.) элемента. По такой ссылке браузер откроет страницу и переместит окно к указанному элементу. Например, ссылка на этот раздел статьи: https://ru.wikipedia.org/wiki/URL#Структура_URL.

Схемы (протоколы) URL[править | править код]

Общепринятые схемы (протоколы) URL включают:

  • ftp — протокол передачи файлов FTP
  • http — протокол передачи гипертекста HTTP
  • rtmp — проприетарный протокол потоковой передачи данных Real Time Messaging Protocol, в основном используется для передачи потокового видео и аудио с веб-камер через Интернет.
  • rtsp — потоковый протокол реального времени.
  • https — специальная реализация протокола HTTP, использующая шифрование (как правило, SSL или TLS)
  • gopher — протокол Gopher
  • mailto — адрес электронной почты
  • news — новости Usenet
  • nntp — новости Usenet через протокол NNTP
  • irc — протокол IRC
  • smb — протокол SMB/CIFS
  • prospero — служба каталогов Prospero Directory Service
  • telnet — ссылка на интерактивную сессию Telnet
  • wais — база данных системы WAIS
  • xmpp — протокол XMPP (часть Jabber)
  • file — имя локального файла
  • data — непосредственные данные (Data: URL)
  • tel — звонок по указанному телефону

Экзотические схемы URL:

Схемы URL в браузерах:

Кодирование URL[править | править код]

Стандарт URL использует набор символов US-ASCII. Это имеет серьёзный недостаток, поскольку разрешается использовать лишь латинские буквы, цифры и несколько знаков пунктуации. Все другие символы необходимо перекодировать. Например, перекодироваться должны буквы кириллицы, буквы с диакритическими знаками, лигатуры, иероглифы. Перекодирующая кодировка описана в стандарте RFC 3986 и называется URL-encoding, URLencoded или percent‐encoding.

Пример кодирования можно видеть в русскоязычной Википедии, использующей в URL русский язык. Например, строка вида:

https://ru.wikipedia.org/wiki/Википедия

кодируется как:

https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F

Реализация[править | править код]

Преобразование происходит в два этапа: сначала каждый символ кириллицы кодируется в UTF-8 в последовательность из двух байтов, а затем каждый байт этой последовательности записывается в шестнадцатеричном представлении с предшествующим знаком процента (%):

В → D0 и 92 → %D0%92
и → D0 и B8 → %D0%B8
к → D0 и BA → %D0%BA
и → D0 и B8 → %D0%B8, и т. д.
Зарезервированные символы[4]
! * ' ( ) ; : @ & = + $ , / ? # [ ]
Не зарезервированные символы[4]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

Все другие символы в URI кодируются.

Зарезервированные символы кодируются в таком соответствии:

! " #[5] $ % &[5] ' * + ,[5] :[5] ;[5] < =[5] > ?[5] [ ] ^ ` { | } <пробел>
%21 %22 %23 %24 %25 %26 %27 %2A %2B %2C %3A %3B %3C %3D %3E %3F %5B %5D %5E %60 %7B %7C %7D %20[6]

Кодирование параметров в Internet Explorer и старом Firefox происходит несколько иначе[7].

В некоторых случаях URL формируется с использованием кодирования Base58[8].

Стандарт IRI[править | править код]

Поскольку такому преобразованию подвергаются буквы всех алфавитов, кроме базовой латиницы, то URL со словами подавляющего большинства языков может стать нечитаемым для человека.

Это всё входит в противоречие с принципом интернационализма, провозглашаемого всеми ведущими организациями Интернета, включая W3C и ISOC. Эту проблему призван решить стандарт IRI (англ. Internationalized Resource Identifier) — международных идентификаторов ресурсов, в которых можно было бы без проблем использовать символы Юникода, и которые поэтому не ущемляли бы права других языков. Хотя заранее сложно сказать, смогут ли когда‐либо идентификаторы IRI заменить столь широко используемые URL (и URI в целом).

Ограничение длины[править | править код]

Формально, длина URL не ограничена, но браузеры имеют ограничения по длине URL. Не рекомендуется использовать URL длиной более 2048 символов, так как Microsoft Internet Explorer имеет именно такое ограничение[9].

Инициатива PURL[править | править код]

Ещё один кардинальный недостаток URL состоит в отсутствии гибкости. Ресурсы во Всемирной паутине и Интернете перемещаются, а ссылки в виде URL остаются, указывая на уже отсутствующие ресурсы. Это особенно болезненно для электронных библиотек, каталогов и энциклопедий. Для решения этой проблемы были предложены постоянные локаторы PURL (англ. Persistent Uniform Resource Locator). В сущности это те же URL, но они указывают не на конкретное место расположения ресурса, а на запись в базе данных PURL, где, в свою очередь, записан уже конкретный URL‐адрес ресурса. При обращении к PURL сервер находит нужную запись в этой базе данных и перенаправляет запрос уже на конкретное местоположение ресурса. Если адрес ресурса меняется, то нет нужды исправлять все бесчисленные ссылки на него — достаточно лишь изменить запись в БД. В настоящий момент эта идея не стандартизирована и не имеет широкого распространения.

См. также[править | править код]

Примечания[править | править код]

  1. Двойной слеш в адресах интернета появился из-за спешки его создателя. РИА Новости (14 октября 2009). Дата обращения: 11 июля 2010. Архивировано 25 августа 2011 года.
  2. Создатель интернета сожалеет о двойном слеше. 3DNews Daily Digital Digest (14 октября 2009). Дата обращения: 26 февраля 2020. Архивировано 26 февраля 2020 года.
  3. The Chrome URL. Дата обращения: 9 декабря 2014. Архивировано 21 октября 2014 года.
  4. 1 2 RFC 3986, раздел 2.2
  5. 1 2 3 4 5 6 7 Символ допустим, но при указании прямым текстом несёт специальное синтаксическое значение
  6. MediaWiki избегает кодирования пробела как %20, вместо этого он везде заменяется символом подчёркивания «_». Многие поисковики заменяют пробел на символ «+».
  7. HTTP, RFC 3986 и браузеры
  8. Flickr Services. Дата обращения: 19 сентября 2014. Архивировано 12 августа 2014 года.
  9. Максимальная длина URL-адреса в Internet Explorer составляет 2083 символа. microsoft.com. Дата обращения: 10 мая 2015. Архивировано 15 ноября 2016 года.

Ссылки[править | править код]