расставляй правильно приоритеты и не отвлекайся на мелочи

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 конкретная реализация — адреса и имени.

Надеюсь всем все понятно. Будьте грамотны!

18 комментариев на статью:
  1. Виктор:

    Тоже не было времени разобраться в этих понятиях. Теперь все стало ясно. Спасибо!
    Только я думал что URN=uri-url-urn.html , раз имя ресурса, а это URN = /2009/09/uri-url-urn.html .

  2. Vitaly:

    Интересно, всегда думал, URL он и в африке URL

  3. crystalbit:

    Когда в первый раз увидел URI, подумал, что третья буква таки L, но опечатка, и она маленькая :)

  4. Свиттер:

    К сожалению, повсеместно бытует термин URL. URI используется редко, хотя URL объявлен как «deprecated».

    Вот перевод статьи Берни Зиммерманна (URI vs. URL):
    http://svitter.ru/?p=557

  5. Слава:

    Спасибо тебе. Заебался с этим эксплорером я уже…

    • Денис:

      Да-да, я тоже оттуда – со статьи, где рассказывается про то, как корректно заставить заказчика принять верстку HTML5+CSS3, то есть изъебнуться под IE8-.

      А вот по поводу URN, мне кажется, вы, автор заметки, напутали: мне кажется, URN – это не просто относительный путь к ресурсу. Вот как сказано в педивикии, magnet-ссылка – это яркий пример URN, так как вовсе не привязана к какому-то месту, а основана на СОДЕРЖИМОМ – это самое важное. Цель URN – сохранить доступ к ресурсу (копии) даже в случае переезда/закрытия одного из хранилищ – сайта.

      • admin:

        Всё верно (и в статье и у Вас).
        Ключевое слово в URN — name, т.е. ЧТО (в URL — location, т.е. ГДЕ).
        Это как с девичьей фамилией: была Иванова Маша, стала Петрова Маша, но как была Машей, так и осталась, только локацию сменила.
        Она (Маша) не привязана к месту, она основана на содержимом :-).

  6. Sergey:

    Все-таки нужно писать, когда учишь других, корректно: в аббревиатуре URI буква I stands for IDENTIFIER not INDICATOR.

  7. Илья:

    Не вводите в заблуждение людей. Во втором ответе толковое и правильное описание:
    http://stackoverflow.com/questions/176264/whats-the-difference-between-a-uri-and-a-url

  8. tiandrey:

    >Нет ничего лучше, чем конкретный пример:
    >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-ссылки: в них указывается хеш содержимого, но не указывается, где это содержимое лежит. Нужно опросить трекеры (например, торрент-трекеры) на предмет наличия этого ресурса (или информации, где этот ресурс есть); однако в самой ссылке расположение ресурса не описано — описан лишь уникальный признак (ну, забудем на время про хэш-коллизии), по которому можно однозначно идентифицировать, что предоставленный ресурс именно тот, что мы ищем.

    • admin:

      И где КОНКРЕТНО в моем примере чушь несусветная?

      При условии, что в статье было сказано:
      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».

      В любом случае, используйте то, что вам понятнее. Мне яснее так, как я сказал в статье.

      Удачи!

      • tiandrey:

        >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 пример такого разделения по частям.

        • admin:

          Одно то я точно понимаю, что «тыкать» незнакомым вам людям — учить вас не надо, что не очень то приятно вашему собеседнику, поэтому оставьте такой тон для «авитовской кухни».

          Где в статье я написал вашими словами: … каждый URI можно представить в виде конкатенации URL+URN? (подчеркиваю — каждый).

          Давайте перепишем пример наоборот (что в принципе ничего не меняет):
          URN = /2009/09/uri-url-urn.html
          URL = http://handynotes.ru
          URI = http://handynotes.ru/2009/09/uri-url-urn.html

          В какой строке чушь несусветная?

  9. likileil:

    Какая у вас дискуссия тут…
    и так:
    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

Ответить
Обязательные поля помечены *