УНИВЕРСАЛЬНЫЙ ИДЕНТИФИКАТОР РЕСУРСОВ (URI), ЕГО НАЗНАЧЕНИЕ И СОСТАВНЫЕ ЧАСТИ
URI (Uniform Resource Identifier) — унифицированный (единообразный) идентификатор ресурса. URI — символьная строка, позволяющая идентифицировать какой-либо ресурс: документ, изображение, файл, службу, ящик электронной почты и т. д. Прежде всего, речь идёт, конечно, о ресурсах сети Интернет и Всемирной паутины. URI предоставляет простой и расширяемый способ идентификации ресурсов. Расширяемость URI означает, что уже существуют несколько схем идентификации внутри URI, и ещё больше будет создано в будущем.
Связь между URI, URL и URN
Диаграмма Венна, отображающая подмножества схемы URI: URL и URN.
URI является либо URL, либо URN, либо одновременно обоими.
- URL — это URI, который, помимо идентификации ресурса, предоставляет ещё и информацию о местонахождении этого ресурса.
- URN — это URI, который только идентифицирует ресурс в определённом пространстве имён (соответственно, в определённом контексте), но не указывает его местонахождения. Например, URN urn:ISBN:0-395-36341-1 — это URI, который указывает на ресурс (книгу) 0-395-36341-1 в пространстве имён ISBN, но, в отличие от URL, URN не указывает на местонахождение этого ресурса: в нём не сказано, в каком магазине её можно купить или на каком сайте скачать.
Поскольку URI не всегда указывает на то, как получить ресурс, в отличие от URL, а только идентифицирует его, это даёт возможность описывать с помощью RDF (Resource Description Framework) ресурсы, которые не могут быть получены через Интернет (например, личность, автомобиль, город и проч.).
История
В 1990 году в Женеве, Швейцария, в стенах Европейского совета по ядерным исследованиям британским учёным Тимом Бернерсом-Ли был изобретён определитель местонахождения ресурса URL. Так как URL является наиболее используемым подмножеством URI, то этот же 1990 год принято считать годом рождения URI. Но, строго говоря, концепция URI была документально оформлена лишь в июне 1994 года в документе RFC 1630.
Новая версия URI была определена в 1998 году в RFC 2396, тогда же слово Universal в названии было заменено на Uniform.
Недостатки
URL стал фундаментальным нововведением в Интернете, поэтому принципы URI документально закреплялись так, чтобы обеспечить полную совместимость с URL. Отсюда появился и большой недостаток URI, пришедший как наследство от URL. В URI, как и в URL, можно использовать только ограниченный набор латинских символов и знаков препинания (даже меньший, нежели в ASCII). Иными словами, если мы захотим использовать в URI символы кириллицы, или иероглифы, или, скажем, специфические символы французского языка, то нам придётся кодировать URI таким же образом, каким в Википедии кодируются URL с символами Юникода. Например, строка вида:
https://ru.wikipedia.org/wiki/Кириллица
кодируется в URL как:
https://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0
Поскольку такому преобразованию подвергаются буквы всех алфавитов, кроме используемой в английском языке латиницы, то URI со словами на других языках (даже европейских) утрачивают способность восприниматься людьми. А это входит в грубое противоречие с принципом интернационализма, провозглашаемого всеми ведущими организациями Интернета, включая W3C и ISOC. Эту проблему призван решить стандарт IRI (англ. Internationalized Resource Identifier) — международных идентификаторов ресурсов, в которых можно было бы без проблем использовать символы Юникода, и которые не ущемляли бы права других языков. Также и сам создатель URI, Тим Бернерс-Ли, говорил, что система доменных имён, лежащая в основе URL, — плохое решение, навязывающее ресурсам иерархическую архитектуру, мало подходящую для гипертекстового веба.
Структура URI
URI = [схема ":"] иерархическая-часть [ "?" запрос ] [ "#" фрагмент ]
В этой записи:
Схема
схема обращения к ресурсу (часто указывает на сетевой протокол), например, http, ftp, file, ldap, mailto, urn
Иерархическая-часть
содержит данные, обычно организованные в иерархической форме, которые, совместно с данными в неиерархическом компоненте запрос, служат для идентификации ресурса в пределах видимости URI-схемы. Обычно иерархическая-часть содержит путь к ресурсу (и, возможно, перед ним, адрес сервера, на котором тот располагается) или идентификатор ресурса (в случае URN).
Запрос
этот необязательный компонент URI описан выше.
Фрагмент
(тоже необязательный компонент)
[RFC 3986] -позволяет косвенно идентифицировать вторичный ресурс посредством ссылки на первичный и указанием дополнительной информации. Вторичный идентифицируемый ресурс может быть некоторой частью или подмножеством первичного, некоторым его представлением или другим ресурсом, определённым или описанным таким ресурсом.
Разбор структуры URI.Для так называемого «парсинга» URI (англ. parsing), то есть для разложения URI на составные части и их последующей идентификации, удобнее всего использовать систему регулярных выражений, доступную нынче почти во всех современных языках программирования. Для разбора URI в стандарте RFC 3986 рекомендуется использовать следующий шаблон:
Этот шаблон включает в себя 9 обозначенных выше цифрами групп (подробнее о шаблонах и группах см. Регулярные выражения), которые наиболее полно и точно разбирают типичную структуру URI, где:
- группа 2 — схема,
- группа 4 — источник,
- группа 5 — путь,
- группа 7 — запрос,
- группа 9 — фрагмент.
Таким образом, если при помощи данного шаблона разобрать, например, такой типичный идентификатор URI:
http://www.ics.uci.edu/pub/ietf/uri/#Related
то 9 вышеуказанных групп шаблона дадут следующие результаты соответственно:
- http:
- http
- //www.ics.uci.edu
- www.ics.uci.edu
- /pub/ietf/uri/
- нет результата
- нет результата
- #Related
- Related
Примеры URI:
Абсолютные URI
- https://ru.wikipedia.org/wiki/URI
- ftp://ftp.is.co.za/rfc/rfc1808.txt
- file://C:\UserName.HostName\Projects\Wikipedia_Articles\URI.xml
- file:///C:/file.wsdl
- file:///Users/John/Documents/Projects/Web/MyWebsite/about.html
- ldap://[2001:db8::7]/c=GB?objectClass?one
- mailto:John.Doe@example.com
- sip:911@pbx.mycompany.com
- news:comp.infosystems.www.servers.unix
- data:text/plain;charset=iso-8859-7,%be%be%be
- tel:+1-816-555-1212
- telnet://192.0.2.16:80/
- urn:oasis:names:specification:docbook:dtd:xml:4.1.2
2) Относительные URI
- /relative/URI/with/absolute/path/to/resource.txt
- //example.org/scheme-relative/URI/with/absolute/path/to/resource.txt
- relative/path/to/resource.txt
- ../../../resource.txt
- resource.txt
- /resource.txt#frag01
- #frag01
[пустая строка] — эквивалентно разбору идентификатора парсером с результатом [пустая строка], то есть ссылка ведёт на объект по умолчанию в схеме по умолчанию
Служба DNS
DNS - система доменных имен. Доменные имена системы DNS – синонимы IP-адреса, так же, как имена в адресной книжке вашего телефона – синонимы телефонных номеров. Они символьные, а не числовые; они удобнее для запоминания и ориентации; они несут смысловую нагрузку. www.irnet.ru → таблицы DNS →193.232.70.36 Доменные имена также уникальны, т.е. нет в мире двух одинаковых доменных имён. Доменные имена, в отличие от IP-адресов необязательны, они приобретаются дополнительно.
Рис. 2. Иерархия в системе DNS.
Так же уникальны адреса, которые указываются на конвертах при доставке писем обычной почтой. В мире нет стран с одинаковыми названиями. И если названия городов иногда и повторяются, то в сочетании с делением на более крупные административные единицы типа районов и областей они становятся уникальными. А названия улиц не должны повторяться в пределах одного города. Таким образом, адрес на основе географических и административных названий однозначно определяет точку назначения. Домены имеют аналогичную иерархию. Имена доменов отделяются друг от друга точками: lingvo.yandex.ru, krkime.com.
DNS обладает следующими характеристиками:
- Распределённость администрирования. Ответственность за разные части иерархической структуры несут разные люди или организации.
- Распределённость хранения информации. Каждый узел сети в обязательном порядке должен хранить только те данные, которые входят в его зону ответственности, и (возможно) адреса корневых DNS-серверов.
- Кеширование информации. Узел может хранить некоторое количество данных не из своей зоны ответственности для уменьшения нагрузки на сеть.
- Иерархическая структура, в которой все узлы объединены в дерево, и каждый узел может или самостоятельно определять работу нижестоящих узлов, или делегировать (передавать) их другим узлам.
- Резервирование. За хранение и обслуживание своих узлов (зон) отвечают (обычно) несколько серверов, разделённые как физически, так и логически, что обеспечивает сохранность данных и продолжение работы даже в случае сбоя одного из узлов.
Уровни домена. Различают домены трех уровней.
Домены первого или верхнего уровня делятся на две группы:
1) Это домены с территориальной принадлежностью, например: .ru .by .ua .de .us и т. д. Т. е. это домены которые присвоены какой-то определенной стране. По ним можно, например, определить к какой стране принадлежит тот или иной сайт.
2) Вторая группа доменов первого уровня это домены, какого-то определенного назначения. Например: .com – для коммерческих организаций, .info – для информационных сайтов, .tv – для телевизионных компаний и т. д. По этим доменам можно определить определенную направленность сайта. Хотя, по правде сказать, в последнее время они все больше используются как угодно и часто не придерживаются своего назначения.
Домены первого уровня не возможно использовать в качестве адреса своего сайта. Они служат для создания доменов второго уровня, поэтому на любом из доменов первого уровня можно зарегистрировать домен второго уровня. Домен второго уровня состоит из следующих элементов: www.имя_сайта.домен первого уровня. Например: www.webmastermix.ru. Рекомендуется использовать доменные имена второго уровня для адреса сайта. Они лучше всего читаются и запоминаются людьми, а так же воспринимаются поисковыми системами. Поэтому большинство сайтов имеет доменные имена именно этого уровня.
Кроме того существуют домены третьего уровня. Они создаются на основе доменов второго уровня. Домен третьего уровня выглядит так: www.forum.webmastermix.ru. Зарегистрировав домен второго уровня вы можете самостоятельно создавать на его основе сколько угодно доменов третьего уровня. Зарегистрировать доменное имя для своего сайта вы можете при помощи специальных сервисов.