Единый идентификатор ресурса (Uniform Resource Identifier (URI)) — это короткая строка символов, идентифицирующая абстрактный или физический ресурс (например, веб-страницу). Единый указатель местоположения ресурса (Uniform Resource Locator (URL)) — это URI, который идентифицирует ресурс по основному способу доступа к нему (например, его «местонахождению в сети»), а не по названию или другим атрибутам этого ресурса. Единое название ресурса (Uniform Resource Name (URN)) — это URI, который должен оставаться уникальным и неизменным даже в том случае, когда ресурс уже не существует или недоступен.
URI являются стандартным способом создания конечных адресов гипертекстовых ссылок для таких инструментов как веб-браузеры. Строка «http://www.kernel.org» является URL (а значит и URI). Многие используют термин URL неправильно, как синоним URI (технически, URL являются частью URI).
URI могут быть абсолютными или относительными. Абсолютный идентификатор ссылается на ресурс независимо от контекста, в то время как относительный идентификатор ссылается на ресурс, описывая его относительно текущего контекста. В относительном идентификаторе части пути «.» и «..» имеют специальные значения: «текущий иерархический уровень» и «уровень выше текущего иерархического уровня», соответственно —аналогично UNIX-подобным системам. Часть пути, содержащая двоеточие, не может быть использована как первая часть пути относительного URI (например, «это:то»), потому что это приведёт к ошибке; перед такими частями надо ставить ./ (например, «./это:то»). Заметим, что в производных MS-DOS (например, Microsoft Windows) в URI в именах устройств двоеточие заменено на вертикальную черту («|»), то есть «C:» заменяется на «C|».
A fragment identifier, if included, refers to a particular named portion (fragment) of a resource; text after a '#' identifies the fragment. A URI beginning with '#' refers to that fragment in the current resource.
Существует множество различных схем URI, в каждой могут быть свои дополнительные правила и смыслы, но все они создаются максимально похожими друг на друга. Например, многие схемы URL позволяют задавать полномочия в следующем формате, обозначаемом здесь как ip_server (квадратные скобки указывают на необязательность):
ip_server = [пользователь [ : пароль ] @ ] узел [ : порт]
Этот формат позволяет указать имя пользователя, его пароль и/или номер порта. Узел — это имя компьютера-узла; он может быть указан в виде имени DNS или IP-адреса (числа через точку). Таким образом, URI <http://fred:fredpassword@example.com:8080/> определяется подключение к веб-серверу example.com по порту 8080 пользователем fred (с помощью пароля fredpassword). Желательно в целях безопасности не указывать пароль в URI. Если в URL указано имя пользователя, но нет пароля, а серверу этот пароль требуется, то программа, обрабатывающая URL, должна запросить его у пользователя.
Далее приводятся наиболее распространённые схемы, используемые в UNIX-подобных системах. Заметьте, что многие программы, использующие URI, имеют внутренние или специализированные схемы, поэтому советуем прочитать на них документацию.
http — веб-сервер (HTTP)
http://ip_server/путь
http://ip_server/путь?запрос
Это URL для доступа к веб-серверу (HTTP). По умолчанию используется порт 80. Если путь указывает на каталог, то веб-сервер сам выберет, что необходимо вернуть; обычно, если есть файл «index.html» или «index.htm», то возвращается его содержимое, в ином случае возвращается список файлов в каталоге. Пример: <http://lwn.net>.
Запрос может быть задан в устаревшем формате «isindex», состоящим из слова или фразы, и не содержащим знака равенства (=). Запрос может быть также в удлинённом формате «GET», в котором может быть несколько запрашиваемых элементов в виде ключ=значение и разделяемых амперсандом (&). Заметим, что ключ может повторяться, но как это обрабатывать будет решать сам веб-сервер и его прикладная программа. Есть проблемы при работе с HTML/XML/SGML с помощью формата запроса GET: когда в такие URI добавляются несколько ключей, используемый в документах SGML/XML (включая HTML) амперсанд (&) перезаписывается в виде &. Заметим, что не все запросы используют этот формат; огромные формы могут быть слишком большими для записи в виде URI, поэтому они используют другой механизм взаимодействия (называемый POST), в котором данные в URI не включаются. Подробности смотрите в спецификации на Common Gateway Interface http://www.w3.org/CGI.
ftp — протокол передачи файлов (FTP)
ftp://ip_server/путь
Это URL для получения доступа к файлу с помощью протокола передачи файлов FTP. Номер порта (управляющего) по умолчанию равен 21. Если не указано имя пользователя, то пишется слово «anonymous», и в этом случае многие клиентские программы в качестве пароля отправляют адрес электронной почты пользователя. Пример: <ftp://ftp.is.co.za/rfc/rfc1808.txt>.
gopher — сервер Gopher
gopher://ip_server/тип_gopher селектор
gopher://ip_server/тип_gopher селектор%09поиск
gopher://ip_server/тип_gopher селектор%09поиск%09gopher+_строка
По умолчанию служба gopher использует порт 70. тип_gopher — односимвольное поле для указания типа ресурса Gopher, на который ссылается URL. Полный путь может быть пустым; в этом случае знак «/» тоже является необязательным, а значение тип_gopher по умолчанию равно «1».
селектор — это строка селектора в Gopher. В протоколе Gopher строки селектора могут содержать любые байты, кроме шестнадцатеричных 09 (US-ASCII HT или tab), 0A (US-ASCII-символ LF) и 0D (US-ASCII-символ CR).
mailto — адрес электронной почты
mailto:адрес_email
Это адрес электронный почты, обычно имеющий форму имя_пользователя@имя_узла. Для получения более подробной информации о формате адресов электронной почты смотрите mailaddr(7)EN. Заметим, что любой символ % должен записываться как %25. Пример: <mailto:dwheeler@dwheeler.com>.
news — сообщение или группа новостей
news:newsgroup-name
news:message-id
В newsgroup-name задаётся иерархическое имя, разделённое точками, например, «comp.infosystems.www.misc». Если значение <newsgroup-name> равно «*» (записывается как <news:*>), то такая запись используется для указания «всех доступных групп новостей». Пример: <news:comp.lang.ada>.
Значение message-id соответствует Message-ID из IETF RFC 1036, без крайних «<» и «>»; оно имеет вид уникальная_часть@полное_доменное_имя. Идентификатор сообщения можно отличить от названия группы новостей по находящемуся в названии символу «@».
telnet — удалённый вход
telnet://ip_server/
Схема URL для Telnet используется для определения интерактивных текстовых служб, которые доступны по протоколу Telnet. Последний символ «/» может быть опущен. По умолчанию используется порт 23. Пример: <telnet://melvyl.ucop.edu/>.
file — обычный файл
file://ip_server/сегменты_пути
file:сегменты_пути
Представляет файл или каталог, доступный локально. Исключение: значение ip_server может быть пустым или равно строке «localhost»; это означает: «машина, с которой обращаются по URL». Если путь указывает на каталог, то программа просмотра представит содержимое каталога с ссылками на каждый элемент, что выполняется не всеми просмотрщиками. KDE поддерживает генерируемые файлы с помощью URL <file:/cgi-bin>. Если указанный файл не найден, то обозреватель может попробовать расширить имя файла при помощи функций охвата (смотрите glob(7)EN и glob(3)).
The second format (e.g., <file:/etc/passwd>) is a correct format for referring to a local file. However, older standards did not permit this format, and some programs don't recognize this as a URI. A more portable syntax is to use an empty string as the server name, for example, <file:///etc/passwd>; this form does the same thing and is easily recognized by pattern matchers and older programs as a URI. Note that if you really mean to say "start from the current location", don't specify the scheme at all; use a relative address like <../test.txt>, which has the side-effect of being scheme-independent. An example of this scheme is <file:///etc/passwd>.
man — справочная страница man
man:имя_команды
man:имя_команды(раздел)
Это ссылка на локальные справочные страницы (man). За именем команды может следовать номер раздела в круглых скобках; для получения более подробной информации о разделах прочтите man(7). Схемы URI в UNIX-подобных системах (например, Linux) различаются и до сих пор не зарегистрированы в IETF. Пример: <man:ls(1)>.
info — страница документации info
info:виртуальное_имя_файла
info:виртуальное_имя_файла#имя_узла
info:(виртуальное_имя_файла)
info:(виртуальное_имя_файла)имя_узла
Эта схема ссылается на справочные страницы info (созданные из файлов texinfo); данный формат документации используется в инструментах GNU. Схемы URI в UNIX-подобных системах (например, Linux) различаются и до сих пор не зарегистрированы в IETF. На момент написания синтаксисы URI у GNOME и KDE различались, поэтому они не понимают синтаксис друг друга. Первые два формата — GNOME: в именах узлов все пробелы заменены подчеркиванием. Следующие два формата — KDE: пробелы в названиях узлов остаются пробелами, даже если это запрещено стандартами URI. Это делалось в надежде на то, что в будущем все программы будут принимать все эти форматы и будут считать подчеркивания как пробелы. В GNOME и KDE, если используется форма без названия узла, то названием по умолчанию считается «Top». Пример формата GNOME: <info:gcc> и <info:gcc#G++_and_GCC>. Пример формата КDE: <info:(gcc)> и <info:(gcc)G++ and GCC>.
whatis — поиск документации
whatis:строка
Эта схема применяет для поиска в базе однострочных описаний команд и возвращает список описаний, содержащих искомую строку. Возвращаются только полные совпадения. За более полной информацией обращайтесь к whatis(1). Данная схема URI в UNIX-подобных системах (например, Linux) различается и до сих пор не зарегистрирована IETF.
ghelp — справочная документация GNOME
ghelp:название_приложения
Схема загружает справку GNOME для заданного приложения. Замечание: пока в документации описаны не все приложения в этом формате.
ldap — простой протокол доступа к каталогам (Lightweight Directory Access Protocol)
ldap://узел_порт
ldap://узел_порт/
ldap://узел_порт/dn
ldap://узел_порт/dn?атрибуты
ldap://узел_порт/dn?атрибуты?область
ldap://узел_порт/dn?атрибуты?область?фильтр
ldap://узел_порт/dn?атрибуты?область?фильтр?расширения
Эта схема поддерживает запросы, направляемые по протоколу LDAP одному или нескольким серверам для получения иерархически упорядоченной информации (например, о людях или ресурсах компьютеров). Подробности о схеме LDAP URL смотрите в RFC 2255. Компоненты этого URL:
- узел_порт
- запрашиваемый сервер LDAP, записывается как имя машины, двоеточие, номер порта (необязательно). По умолчанию в LDAP используется TCP-порт 389. Если компонент не указан, то клиент сам определяет, какой из LDAP-серверов запрашивать.
- dn
- отличительное имя LDAP, которое определяет базовый объект поиска LDAP (смотрите RFC 2253 раздел 3).
- атрибуты
- возвращаемый список атрибутов, разделённых запятой; смотрите RFC 2251, раздел 4.1.5. Если данный компонент не задан, то возвращаются все атрибуты.
- область
- область поиска, значениями могут быть: «base» (для поиска по базовому объекту), «one» (для поиска на одном уровне) или «sub» (для поиска по ветвям). Если область поиска не указывается, то по умолчанию используется «base».
- фильтр
- фильтр поиска (набор возвращаемых записей). Если компонент не задан, то возвращаются все записи. Смотрите RFC 2254 раздел 4.
- расширения
- a comma-separated list of type=value pairs, where the =value portion may be omitted for options not requiring it. An extension prefixed with a '!' is critical (must be supported to be valid), otherwise it is noncritical (optional).
Приведём примеры запросов LDAP. Запрос к ldap.itd.umich.edu информации о Мичиганском университете США:
ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US
Для того, чтобы получить атрибут почтового адреса, введите запрос:
ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US?postalAddress
Для того, чтобы запросить у host.com (порт 6666) информацию о человеке по имени (cn) «Babs Jensen» в Мичиганском университете, введите строку:
ldap://host.com:6666/o=University%20of%20Michigan,c=US??sub?(cn=Babs%20Jensen)
wais — глобальная сеть информационных серверов (Wide Area Information Servers)
wais://узел_порт/база_данных
wais://узел_порт/база_данных?поиск
wais://узел_порт/база_данных/wtype/wpath
Эта схема предназначена для базы данных WAIS, поиска или документа (более подробную информацию о WAIS смотрите IETF RFC 1625 ). Узел_порт — это название машины, в некоторых случаях сопровождающееся номером порта (после двоеточия). Используемый порт по умолчанию — 210.
Первая форма определяет базу данных WAIS для поиска. Вторая форма — это определённой поиск в базе данных WAIS. Третья форма предназначена для поиска конкретного документа в базе данных WAIS. Значение wtype служит для обозначения объекта в WAIS, а wpath — это document-id WAIS.
другие схемы
Существует множество других схем URI. Большинство программ, использующих URI, поддерживают свои собственные схемы URI (например, Mozilla имеет схему about: для работы с внутренней информацией; браузер справки GNOME имеет схему toc: для работы с разными разделами). Есть схемы, которые в данный момент не распространены (например, prospero). Схема news: предпочтительнее схемы nntp:. URN поддерживаются схемой urn: (например, urn:ietf:… означает документы IETF); в настоящее время URN широко не используются. Не все приложения поддерживают все схемы.