В чем разница между URI, URL и URN? - PullRequest
4098 голосов
/ 07 октября 2008

Люди говорят о URL s, URI s и URN s, как будто это разные вещи, но они выглядят одинаково невооруженным глазом.

В чем разница между ними?

Ответы [ 31 ]

3720 голосов
/ 31 декабря 2009

URI s идентифицируют и URL s locate ; однако, локаторы также являются идентификаторами , поэтому каждый URL-адрес также является URI, но есть URI, которые не являются URL-адресами.

Примеры

  • Роджер Пэйт

Это мое имя, которое является идентификатором. Это похоже на URI, но не может быть URL-адресом, так как ничего не говорит о моем местоположении или о том, как связаться со мной. В этом случае также случается идентифицировать по крайней мере 5 других людей только в США.

  • 4914 West Bay Street, Нассау, Багамские Острова

Это локатор, который является идентификатором для этого физического местоположения. Это как URL и URI (так как все URL являются URI), а также идентифицирует меня косвенно как «резидент ..». В этом случае он однозначно идентифицирует меня, но это изменится, если я получу соседа по комнате.

Я говорю «нравится», потому что эти примеры не соответствуют требуемому синтаксису.

Популярная путаница

Из Википедия :

В вычислениях унифицированный указатель ресурса (URL) - это подмножество унифицированного идентификатора ресурса (URI), которое указывает, где идентифицированный ресурс доступен и механизм его получения. В популярном использовании и во многих технических документах и ​​устных обсуждениях он часто неправильно используется в качестве синонима для URI , ... [emphasis mine]

Из-за этой распространенной путаницы многие продукты и документация неправильно используют один термин вместо другого, присваивают свое собственное различие или используют их как синонимы.

урны

Мое имя, Роджер Пэйт, может быть похоже на URN (Uniform Resource Name), за исключением того, что намного более регламентировано и предназначено для уникальности для обоих пространство и время.

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

URN отличаются от URL в этом жестком ограничении уникальности, даже если они оба имеют общий синтаксис URI.

1652 голосов
/ 07 октября 2008

С RFC 3986 :

URI может быть далее классифицирован как локатор, имя или оба. Термин «унифицированный указатель ресурса» (URL) относится к подмножеству URI что, в дополнение к идентификации ресурса, предоставляют средства найти ресурс, описав его основной механизм доступа (например, его сеть "местоположение"). Термин «Единое название ресурса» (URN) исторически использовался для обозначения обоих URI под Схема «урна» [RFC2141] , которые должны оставаться глобально уникальными и постоянный, даже когда ресурс перестает существовать или становится недоступен и для любого другого URI со свойствами имени.

Таким образом, все URL являются URI (на самом деле не совсем - см. Ниже), а все URN являются URI - но URN и URL разные, поэтому нельзя сказать, что все URI являются URL.

РЕДАКТИРОВАТЬ: Ранее я думал, что все URL-адреса являются действительными URI, но согласно комментариям:

Не"все URL являются URI". Это зависит от толкования RFC. Например, в Java парсер URI не любит [ или ], и это потому, что спецификация говорит «не должен» и не «не должен».

Так что, к сожалению, вода мутится дальше.

Если вы еще не прочитали ответ Роджера Пейта , я бы посоветовал сделать то же самое.

580 голосов
/ 05 марта 2015

URI - Унифицированный идентификатор ресурса

URI - это стандарт идентификации документов с использованием короткой строки из цифр, букв и символов. Они определены в RFC 3986 - Унифицированный идентификатор ресурса (URI): общий синтаксис . Все URL, URN и URC типов URI.

URL - Унифицированный указатель ресурса

Содержит информацию о том, как извлечь ресурс из его местоположения. Например:

URL-адреса всегда начинаются с протокола (http) и обычно содержат такую ​​информацию, как имя сетевого узла (example.com) и часто путь к документу (/foo/mypage.html). URL могут иметь параметры запроса и идентификаторы фрагментов.

URN - Унифицированное имя ресурса

Идентифицирует ресурс по уникальному и постоянному имени, но не обязательно говорит вам, как найти его в Интернете. Обычно начинается с префикса urn: Например:

  • urn:isbn:0451450523 для идентификации книги по номеру ISBN.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 глобальный уникальный идентификатор
  • urn:publishing:book - Пространство имен XML, которое идентифицирует документ как тип книги.

URN могут идентифицировать идеи и концепции. Они не ограничиваются идентификацией документов. Когда URN действительно представляет документ, он может быть преобразован в URL «распознавателем». Затем документ можно загрузить с URL-адреса.

URC - Единая ссылка на ресурс

Указывает на метаданные о документе, а не на сам документ. Примером URC является тот, который указывает на исходный код HTML страницы, такой как: view-source:http://example.com/

URI данных

Вместо того, чтобы размещать их в Интернете или называть их, данные могут быть помещены непосредственно в URI. Примером будет data:,Hello%20World.


Часто задаваемые вопросы

Я слышал, что больше не должен произносить URL, почему?

Спецификация W3 для HTML гласит, что href тега привязки может содержать URI, а не только URL. Вы должны иметь возможность ввести URN, например, <a href="urn:isbn:0451450523">. Ваш браузер затем разрешит этот URN в URL и загрузит книгу для вас.

Знают ли какие-либо браузеры, как получать документы по URN?

Не то, что я знаю, но современный веб-браузер реализует схему URI данных.

Разница между URL и URI связана с тем, является ли она относительной или абсолютной?

Нет. Как относительные, так и абсолютные URL-адреса являются URL-адресами (и URI).

Различие между URL и URI связано с тем, есть ли у него параметры запроса?

Нет. Оба URL-адреса с параметрами запроса и без них являются URL-адресами (и URI).

Различие между URL и URI связано с тем, имеет ли он идентификатор фрагмента?

Нет. Оба URL с идентификаторами фрагментов и без них являются URL-адресами (и URI).

Различие между URL и URI связано с тем, какие символы разрешены?

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

Но разве W3C теперь не говорит, что URL и URI - это одно и то же?

Да. W3C осознал, что в этом есть куча путаницы. Они выпустили разъясняющий документ URI , в котором говорится, что теперь можно использовать термины URL и URI взаимозаменяемо (чтобы обозначать URI). Больше не нужно строго сегментировать URI на разные типы, такие как URL, URN и URC.

Может ли URI быть и URL, и URN?

Определение URN теперь слабее, чем то, что я сказал выше. В последнем RFC по URI говорится, что любой URI теперь может быть URN (независимо от того, начинается ли он с urn:), если он имеет «свойства имени». То есть: он глобально уникален и постоянен, даже когда ресурс перестает существовать или становится недоступным. Пример: URI, используемые в типах документов HTML, такие как http://www.w3.org/TR/html4/strict.dtd. Этот URI будет по-прежнему называть HTML4 переходным типом документа, даже если страница на веб-сайте w3.org была удалена.


URI/URL Venn Diagram

246 голосов
/ 31 декабря 2009

В итоге: URI идентифицирует, URL идентифицирует и находит.

Рассмотрим конкретное издание пьесы Шекспира «Ромео и Джульетта» , цифровую копию которого вы имеете в своей домашней сети.

Вы можете идентифицировать текст как urn:isbn:0-486-27557-4.
Это будет URI, но более конкретно: URN *, поскольку он называет текст .

Вы также можете идентифицировать текст как file://hostname/sharename/RomeoAndJuliet.pdf.
Это также будет URI, но более конкретно - URL , поскольку он находит текст .

* Унифицированное имя ресурса

(Обратите внимание, что мой пример адаптирован из Википедия )

135 голосов
/ 31 декабря 2009

Это очень хорошо написанные, но многословные ответы. Вот разница в отношении CodeIgniter :

URL - http://example.com/some/page.html

URI - /some/page.html

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

URI - это ресурс в текущем домене, поэтому для него требуется меньше информации.

В каждом случае, когда CodeIgniter использует слово URL или URI, это различие, о котором они говорят, хотя в общей схеме Интернета это не на 100% правильно.

78 голосов
/ 21 июля 2017

Прежде всего выведите свой ум из смятения и примите это просто, и вы поймете.

URI => Универсальный идентификатор ресурса Идентифицирует полный адрес ресурса i-e, имя или оба.

URL => Унифицированный указатель ресурса Определяет местонахождение ресурса.

URN => Унифицированное имя ресурса Определяет название ресурса

Пример

У нас есть адрес https://www.google.com/folder/page.html, где

URI (универсальный идентификатор ресурса) => https://www.google.com/folder/page.html

URL (унифицированный указатель ресурса) => https://www.google.com/

URN (унифицированное имя ресурса) => /folder/page.html

URI => (URL + URN) или только URL или только URN

63 голосов
/ 16 октября 2014

Небольшое дополнение к уже опубликованным ответам, вот диаграмма Венна, чтобы подвести итог теории (из прекрасного объяснения Пратика Джоши ):

enter image description here

И пример (также с сайта Prateek):

enter image description here

53 голосов
/ 01 декабря 2011

Это одна из самых запутанных и, возможно, нерелевантных тем, с которыми я сталкивался как веб-профессионал.

Насколько я понимаю, URI - это описание чего-либо, следующего принятому формату, которое может определять как уникальное имя (идентификацию) чего-либо, так и его местоположение.

Существует два основных подмножества - URL-адреса, которые определяют местоположение (особенно для браузера, пытающегося найти веб-страницу) и URN, которые определяют уникальное имя чего-либо.

Я склонен считать, что URN похожи на GUID. Это просто стандартизированная методология предоставления уникальных названий вещей. Как и в декларативном пространстве имен, в котором используется название компании - не то, чтобы где-то на сервере находился ресурс, соответствующий этой строке текста, - он просто однозначно идентифицирует что-то.

Я также склоняюсь к тому, чтобы полностью избегать термина URI и обсуждать вещи только с точки зрения URL или URN, в зависимости от обстоятельств, потому что это вызывает так много путаницы. Вопрос, на который мы действительно должны попытаться ответить для людей, заключается не столько в семантике, сколько в том, как определить при столкновении с терминами, есть ли в них какое-либо практическое различие, которое изменит подход к ситуации программирования. Например, если кто-то исправляет меня в разговоре и говорит: «О, это не URL, а URI», я знаю, что он полон. Если кто-то скажет: «мы используем URN для определения ресурса», я с большей вероятностью пойму, что мы называем его только уникально, а не размещаем его на сервере.

Если я далеко от базы - пожалуйста, дайте мне знать!

44 голосов
/ 23 декабря 2015

Идентификатор = Имя + Местоположение

Каждый URL ( U niform R esource L ocator) является URI ( U niform R esource I dentifier), абстрактно говоря, но каждый URI не является URL. Существует еще одна подкатегория URI - URN ( U niform R esource N ame), который является именованным ресурсом, но не указывает, как их найти, например, mailto, новости, ISBN - это URI. Источник

enter image description here

URN:

  • URN Формат: urn:[namespace identifier]:[namespace specific string]
  • урна: и: постоять за себя.
  • Примеры :
    • urn: uuid: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • урна: ISSN: 0167-6423
    • urn: isbn: 096139210x
    • Amazon Resource Names (ARNs) - это уникально идентифицированные ресурсы AWS.
      • ARN Формат: arn:partition:service:region:account-id:resource

URL:

  • Формат URL: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • : // ,? и # постоять за себя.
  • схемами являются https, ftp, gopher, mailto, news, telnet, file, man, info, whatis, ldap ...
  • Примеры:
    • http://ip_server/path?query
    • FTP: // ip_server / путь
    • электронная почта: Email-адрес
    • новости: телеконференция имя
    • телнет: // ip_server /
    • file: // ip_server / path_segments
    • LDAP:??? // HostPort / дп атрибуты расширения сферы применения фильтра

Аналогия:
Чтобы связаться с человеком: управление автомобилем (протокол других SMS, электронная почта, телефон), адрес (имя хоста, другой номер телефона, emailid) и имя человека (имя объекта с относительным путем).

42 голосов
/ 07 октября 2008

URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

URL - это подмножество URI (которые также содержат URN).

По сути, URI - это общий идентификатор, где URL указывает местоположение, а URN - имя.

...