Что такое URI, URL, URN и чем они различаются
Пост из серии: всегда хотел это понять, но значимость его была настолько мала, что всегда находился повод этого не делать :)
А вы задавались вопросом: URL — что это?
Всегда с таким сталкиваюсь, но до сих пор не желал понять в чем различие между терминами URI, URL, URN, а тут вдруг постик (к сожалению, он уже канул в Лету), решил - и сам почитаю, и другим поведаю, хотя, как сказано выше, от этого ничего не изменится, но люблю я иногда побуквоедствовать, так-что читайте толковый переводец:
Вы когда-нибудь обращали внимание на адресную строку в Вашем браузере? Что это? URI, URL или URN? Многие из нас не делают различий между URI, URL, URN, а кое-кто даже и не слышал терминов URI и URN, все просто пользуются термином URL. Давайте вместе попытаемся разобраться в этом.
Расшифровка аббревиатур
URI - Uniform Resource Identifier (унифицированный идентификатор ресурса)
URL - Uniform Resource Locator (унифицированный определитель местонахождения ресурса)
URN - Unifrorm Resource Name (унифицированное имя ресурса)
Внимание, здесь в мелочах кроется истина, но пока ничего не понятно, какая-то каша. Едем дальше.
Определение
URI: Обозначает имя и адрес ресурса в сети. Как правило, делится на URL и URN, поэтому URL и URN это составляющие URI.
URL: Адрес некоторого ресурса в веб. URL определяет местонахождение ресурса и способ обращения к нему.
URN: Имя некоторого ресурса в веб. Смысл URN в том, что он определяет только название конкретного предмета, который может находится во множестве конкретных мест.
Итак, мы можем считать, что:
URI = URL или URI = URN или URI = URL + URN
Нет ничего лучше, чем конкретный пример
URI = http://handynotes.ru/2009/09/uri-url-urn.html
URL = http://handynotes.ru
URN = /2009/09/uri-url-urn.html
Подведем итоги
URI это концепция абстрактного идентификатора, тогда как URL и URN конкретная реализация - адреса и имени.
Надеюсь всем всё понятно. Будьте грамотны!
Восприятие каждого из нас индивидуально, поэтому — спорьте и читайте обсуждения в комментариях к статье, там много чего интересного.
Тоже не было времени разобраться в этих понятиях. Теперь все стало ясно. Спасибо!
Только я думал что URN=uri-url-urn.html , раз имя ресурса, а это URN = /2009/09/uri-url-urn.html .
Интересно, всегда думал, URL он и в африке URL
Когда в первый раз увидел URI, подумал, что третья буква таки L, но опечатка, и она маленькая :)
К сожалению, повсеместно бытует термин URL. URI используется редко, хотя URL объявлен как «deprecated».
Спасибо за статью… И, да, — приятный у Вас бложек :)
Спасибо тебе. Заебался с этим эксплорером я уже…
Да-да, я тоже оттуда – со статьи, где рассказывается про то, как корректно заставить заказчика принять верстку HTML5+CSS3, то есть изъебнуться под IE8-.
А вот по поводу URN, мне кажется, вы, автор заметки, напутали: мне кажется, URN – это не просто относительный путь к ресурсу. Вот как сказано в педивикии, magnet-ссылка – это яркий пример URN, так как вовсе не привязана к какому-то месту, а основана на СОДЕРЖИМОМ – это самое важное. Цель URN – сохранить доступ к ресурсу (копии) даже в случае переезда/закрытия одного из хранилищ – сайта.
Всё верно (и в статье и у Вас).
Ключевое слово в URN — name, т.е. — ЧТО (в URL — location, т.е. ГДЕ).
Это как с девичьей фамилией: была Иванова Маша, стала Петрова Маша, но как была Машей, так и осталась, только локацию сменила.
Она (Маша) не привязана к месту, она основана на содержимом :-).
Все-таки нужно писать, когда учишь других, корректно: в аббревиатуре URI буква I stands for IDENTIFIER not INDICATOR.
Спасибо, теперь мне гораздо легче … серьезно :)
Не вводите в заблуждение людей. Во втором ответе толковое и правильное описание:
http://stackoverflow.com/questions/176264/whats-the-difference-between-a-uri-and-a-url
Второй, это какой? Этот:
URIs identify and URLs locate; however, locators are also identifiers, so every URL is also a URI, but there are URIs which are not URLs.
>Нет ничего лучше, чем конкретный пример:
>
URI = http://handynotes.ru/2009/09/uri-url-urn.html
>
URL = http://handynotes.ru
>
URN = /2009/09/uri-url-urn.html
Чушь несусветная, читай RFC. Если вкратце, то множество URI разделяется на 2 класса: URL и URN.
URL — путь, по которому можно получить ресурс. Например,
https://www.ietf.org/rfc/rfc3986.txt.
В данный момент там описание RFC №3986, но если злоумышленник получит доступ к сайту IETF, то по этому же URL’у может быть доступен совсем другой ресурс, например, порнуха, или троян какой.
URN — идентификатор, по которому однозначно определяется ресурс, однако в нём не сказано, где этот ресурс лежит. Например,
urn:ietf:rfc:3986
Этот URN для RFC №3986, однако, он не говорит, где лежит ресурс, он просто описывает уникальный идентификатор ресурса.
Ещё в качестве более понятного примера URN можно привести magnet-ссылки: в них указывается хеш содержимого, но не указывается, где это содержимое лежит. Нужно опросить трекеры (например, торрент-трекеры) на предмет наличия этого ресурса (или информации, где этот ресурс есть); однако в самой ссылке расположение ресурса не описано — описан лишь уникальный признак (ну, забудем на время про хэш-коллизии), по которому можно однозначно идентифицировать, что предоставленный ресурс именно тот, что мы ищем.
И где КОНКРЕТНО в моем примере чушь несусветная?
При условии, что в статье было сказано:
URI = URL или URI = URN или URI = URL + URN
Если вы любите оперировать знаниями из RFC, то вот откуда это взято — см. RFC3986 п. 1.1.3 A URI can be further classified as a locator, a name, or both.
А теперь возьмем пример из того-же RFC:
tel:+1-816-555-1212
Это URI, который можно разделить на URL (tel:+1-816) и URN (555-1212) и тогда человеческим языком будет понятно, что до этого объекта (555-1212) можно добраться с помощью телефона (tel:) позвонив в США (+1-816).
URI это абстракция и …, как сказано опять же в RFC:
Future specifications and related documentation should use the general term «URI» rather than the more restrictive terms «URL» and «URN».
В любом случае, используйте то, что вам понятнее. Мне яснее так, как я сказал в статье.
Удачи!
>URI = URL или URI = URN или URI = URL + URN
Ты понимаешь, что это операция над множествами? Это значит, что каждый URI это либо URL, либо URN, либо и то, и другое, а не то, что каждый URI можно представить в виде конкатенации URL+URN.
Читай: https://www.ietf.org/rfc/rfc3986.txt, пункт 1.1.3
>A URI can be further classified as a locator, a name, or both.
Classified, понимаешь, а не separated.
А твой пример с разделением URI на часть-URL и часть-URN
(URI =
http://handynotes.ru/2009/09/uri-url-urn.html
) = (URL =http://handynotes.ru
) + (URN = /2009/09/uri-url-urn.html)— это и есть чушь несусветная.
Ну, или найди в RFC пример такого разделения по частям.
Одно то я точно понимаю, что «тыкать» незнакомым вам людям — учить вас не надо, что не очень то приятно вашему собеседнику, поэтому оставьте такой тон для «авитовской кухни».
Где в статье я написал вашими словами: … каждый URI можно представить в виде конкатенации URL+URN? (подчеркиваю — каждый).
Давайте перепишем пример наоборот (что в принципе ничего не меняет):
URN = /2009/09/uri-url-urn.html
URL =
http://handynotes.ru
URI =
http://handynotes.ru/2009/09/uri-url-urn.html
В какой строке чушь несусветная?
Какая у вас дискуссия тут…
и так:
URI — Uniform Resource Identifier (унифицированный идентификатор ресурса)
URL — Uniform Resource Locator (унифицированный определитель местонахождения ресурса)
URN — Unifrorm Resource Name (унифицированное имя ресурса)
Поиграем с тождествами:
Так как URL появился в 1990, а URI в 94 и назывались универсальными. Эти 4 года все равно определялся URL как местонахождение файла (Ведь ресурс это не сайт, это может быть любой файл)=> URL=URI
Унифицированное имя ресурса URN возникло из-за существенных недостатков системы URL, и URL не может быть URN и наоборот.
И наконец URN это URI, который только идентифицирует ресурс в определённом пространстве имён (и, соответственно, в определённом контексте), но не указывает его местонахождения.
А так как URI должен идентифицировать и местоположение, то должен быть еще и URL => URI=URN, URI=URL, URI=URL+URN
URN включает в себя название пространства имен и идентификатора в этом пространстве.
URI,URL =
http://handynotes.ru/2009/09/uri-url-urn.html
(полная идентификация файла, место(Сайт(сервер)), Каталоги, подкаталоги, имя файла, расширение)
URL,URI =
http://handynotes.ru
(место(Сайт(сервер))
URN,URI = /2009/09/uri-url-urn.html
(Название пространства имен и идентификатора в этом пространстве, иначе можно записать
%systemroot%/2009/09/uri-url-urn.html
Спасибо!