В чем разница между URI, URL и URN?

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

Каковы различия между ними?


person Sean McMains    schedule 06.10.2008    source источник
comment
URL более конкретен, чем URI.   -  person mk12    schedule 31.12.2009
comment
Веб-мастера ответят на этот вопрос: В чем разница между URI и URL   -  person hippietrail    schedule 21.12.2012
comment
Я всегда понимал, что URL - это то, что пользователь будет использовать для перехода к местоположению (независимо от того, вводится ли он вручную или копируется / вставляется), тогда как URI - это интерпретация оригинала URL на стороне сервера. Но, судя по всему, это еще не все, как описано в многочисленных ответах.   -  person Jerry Dodge    schedule 19.08.2014
comment
Мини-диаграмма Венна: ( URIs ( URLs ) )   -  person icc97    schedule 13.11.2014
comment
Кажется, все еще существует большая путаница в отношении URI и URL-адреса, даже среди тех, кто пытался ответить на этот вопрос. Всем было бы полезно увидеть практические примеры URL-адресов, которые не являются URI, примеры URI, которые не являются URL-адресами, и примеры, которые являются URL-адресами и URI.   -  person Dennis    schedule 08.02.2015
comment
Кэти: Это твоя собака? Боб: Правильнее было бы назвать его собакой. Кэти: Нет, он собака. Вы, сударь, педант.   -  person Yojimbo    schedule 20.07.2015
comment
@hippietrail, спасибо за двунаправленные ссылки между ними, я предпочитаю принятый ответ на обмен стеками для веб-мастеров   -  person earcam    schedule 03.09.2015
comment
Ну, URI и URL в некоторых шрифтах выглядят одинаково.   -  person PyRulez    schedule 28.02.2016
comment
URI = stackoverflow.com/questions/176264/ URL = stackoverflow.com/questions URN = / 176264 / what-is-the-difference-between-a-uri-a-url-and-a-urn   -  person helloWorld    schedule 14.08.2017


Ответы (31)


Из RFC 3986:

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

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

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

person Jon Skeet    schedule 06.10.2008
comment
Только URI со схемой urn: являются URN. URI может быть классическим URL, URN или просто URI, который не начинается с urn: и не ссылается на расположение ресурса. - person Mark Cidade; 07.10.2008
comment
Одним из примеров являются URN InfoPath, которые важны, например, в рабочих процессах Sharepoint: urn: schemas-microsoft-com: office: infopath: blogsample: -myXSD-2004-05-19T20-48-18 - person Michael Stum; 07.10.2008
comment
Не все URL-адреса являются URI. Это зависит от интерпретации RFC. Например, в Java синтаксическому анализатору URI не нравятся [ или ], и это потому, что в спецификации сказано, что не должен и не должен. - person Adam Gent; 16.05.2013
comment
@AdamGent: RFC 3986 1.1.3: URI можно дополнительно классифицировать как локатор, имя или и то, и другое. Итак, если URL-адрес - это особый вид URI, это означает, что каждый URL-адрес является URI. Не так ли? - person Hubert; 17.06.2013
comment
Это зависит от вашей семантики special. URL-адреса не являются синтаксическим подмножеством URI, точно так же, как C на самом деле синтаксически не является подмножеством C ++ (IIRC ... Это могло измениться). - person Adam Gent; 17.06.2013
comment
@AdamGent: Звучит как причуда реализации Java, а не нормативно. Сам java.net.URI doc говорит, что каждый URL-адрес абстрактно говоря, это URI, но не каждый URI является URL-адресом. И java.net.URL делает странные вещи, например, проверяет равенство URL-адресов, преобразовывая имена хостов в IP-адреса (что, в первую очередь, противоречит RFC 3986 sec 6 и нарушает w виртуальных хостов). Я думаю, это просто означает, что стандартная библиотека Java имеет противоречивое поведение класса. - person Andrew Janke; 11.03.2014
comment
Думаю, я разобрался с скобками Java [ и ]. RFC 3986 sec 3.2.2 говорит, что [IPv6 host address] - единственное место, где в синтаксисе URI разрешены символы квадратных скобок. Если вы используете их в нужном месте, java.net.URI их примет. new java.net.URI("foo://[1080:0:0:0:8:800:200C:417A]/a/b") у меня получилось на Java 1.7. "foo://example.com/a[b]" ошибок. Это звучит в соответствии с RFC. Форма new URI("http", "example.com", "/a/b[c]!$&'()*+", null, null) будет% -кодировать []. То, что java.net.URL принимает их в другом месте, звучит так, как будто делает меньше проверки. - person Andrew Janke; 11.03.2014
comment
@AndrewJanke: Спасибо - правда, не совсем уверен, где остается мой ответ :) - person Jon Skeet; 11.03.2014
comment
@AndrewJanke На самом деле все наоборот. Синтаксический анализатор URI в Java более строг (поскольку в нем следует не следует), и да, у других языков, таких как Python, есть эта проблема: urlparse.urlparse('http://blah.com/a[b') и urlparse.parse_qsl('a=[',True,True) должны терпеть неудачу, но не работают (обратите внимание, как я даже передал параметр strict на последнем). Я написал об этом в блоге здесь, где есть еще несколько релевантных ссылок: adamgent.com/post/25161273526/urls-are-not-a-subset-of-uris. Вы также должны знать, что все контейнеры сервлетов (которые я использовал) с радостью будут передавать вам URL-адреса с [ и ] в пути. - person Adam Gent; 11.03.2014
comment
@AdamGent Может быть, мне нужно еще прочитать об этом. Где то не следует, о котором вы говорите? В RFC, возвращающемся к RFC 1630, я только вижу, что они говорят, что [и] должны быть экранированы или могут не появляться. - person Andrew Janke; 11.03.2014
comment
@AndrewJanke Я включил ссылку в свое сообщение в блоге (вы могли ее пропустить) tools .ietf.org / html / rfc2396 # section-2.4.3 (продолжение на странице 10). Да, это RFC 2396, но большинство вещей, вероятно, следует этой старой спецификации, а не RFC 3986, на которую я не обращал внимания. - person Adam Gent; 12.03.2014
comment
@AndrewJanke Такие символы, как [, ], называются неразумными, поэтому не следует. Я не могу найти, где говорится, что не следует для неразумного (возможно, более старая спецификация), но это определенно подразумевается. - person Adam Gent; 12.03.2014
comment
@AdamGent Да, я прочитал это из вашего сообщения в блоге. Это слово не должно появляться в разделе 2.4.3. Нормативный язык находится в последнем предложении, и это обязательно: данные, соответствующие исключенным символам, должны быть экранированы, чтобы они были правильно представлены в URI. Может это другой раздел? - person Andrew Janke; 12.03.2014
comment
@AndrewJanke Я не совсем уверен. Моя цель, как и мой пост в блоге, на самом деле не быть педантичной, но информативной для других, чтобы избежать ловушек, которые у меня были. В новой спецификации для URI URL может быть подмножеством URI, но в общем случае это не так. - person Adam Gent; 12.03.2014
comment
@JonSkeet Может быть, просто нужно различать стандарты и реализации? Например. Формально, согласно RFC, все URL-адреса являются URI. (Отрывок из RFC.) Но существующие реализации могут не соответствовать спецификации в точности, возможно, из-за возможности взаимодействия, и могут использовать URL-адреса, которые не соответствуют RFC. А поскольку это сложная область, некоторые люди и документы могут использовать «URL» для обозначения чего-то отличного от того, что указано в RFC. Вроде как большинство процедур проверки электронной почты не соответствуют определениям RFC. - person Andrew Janke; 12.03.2014
comment
позвольте нам продолжить это обсуждение в чате - person Andrew Janke; 12.03.2014
comment
@AndrewJanke @Jon Skeet Вот SO-ответ на _1 _, _ 2_: stackoverflow.com/a/1547922/318174 - person Adam Gent; 10.07.2014

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

Примеры

  • Роджер Пэйт

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

  • 4914 West Bay Street, Нассау, Багамы

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

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

Народная путаница

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

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

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

URN

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

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

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

person Community    schedule 31.12.2009
comment
URNs are different from URLs in this rigid uniqueness constraint Означает ли это, что URL-адреса не идентифицируют местоположение однозначно? - person eugene; 11.07.2013
comment
Ответ Роджера дает хороший прагматический совет. За официальным ответом я обращаюсь к W3C, который опубликовал URI, URL-адреса и URN: пояснения и рекомендации в 2001 году. Вкратце, W3C утверждает, что современная точка зрения состоит в том, что все является URI. URL - это неформальное понятие, а не формальное. И эта путаница восходит к классическому взгляду, который пытался жестко различать категории URI (из которых URL был одной категорией). - person netjeff; 27.07.2013
comment
..a Uniform Resource Locator (URL) .. указывает, где доступен идентифицированный ресурс и механизм его извлечения. Другими словами, не существует такой вещи, как относительный URL? - person Arne; 28.04.2014
comment
Является ли earth128: Edward-de-Leau / 6000000000569063853 (уникальный я в нескольких мультивселенных) URN, URL-адресом или URI? - person edelwater; 20.09.2014
comment
@edelwater: Я полагаю, это uri, поскольку он только идентифицирует вас, но ничего не говорит о том, как к вам добраться, если вы не имеете в виду, что earth128 является неким средством межпланетных путешествий :) - person user20358; 27.04.2015
comment
Искусство речи в общении - это уметь использовать обычно используемый простой английский язык для объяснения ракетостроения! Кудо - person Jeb50; 05.11.2017
comment
@netjeff Эта цитата из современного раздела уточнения URI: http URI - это URL, вероятно, покрывает около 99% того, что люди используют - person icc97; 09.04.2018

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

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

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

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

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:[email protected]
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (относительный URL-адрес, полезен только в контексте другого 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 - Uniform Resource Citation

Указывает на метаданные о документе, а не на сам документ. Примером 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

person Stephen Ostermiller    schedule 04.03.2015
comment
C: \ myfile - это URI, URL или URN? или ни один из них. - person bvdb; 18.05.2015
comment
Путь к файлу не является URL-адресом или URI, если вы не добавили в него префикс file://. Хотя браузеры обычно обрабатывают пути к файлам без форматирования URL. Mozilla публикует свои тестовые примеры для URL-адресов файлов. - person Stephen Ostermiller; 08.06.2015
comment
См. раздел 1.1 RFC. Единообразие дает несколько преимуществ. Это позволяет использовать разные типы идентификаторов ресурсов в одном контексте, даже если механизмы, используемые для доступа к этим ресурсам, могут различаться. Это позволяет единообразную семантическую интерпретацию общих синтаксических соглашений для разных типов идентификаторов ресурсов ... - person Stephen Ostermiller; 05.07.2015
comment
Этот ответ понять намного проще. Я вижу четкие изображения реальных примеров URL-адресов и URN. И для всех, кто может узнать об этом больше ... danielmiessler.com/study/url-uri - person vee; 22.05.2017
comment
Спасибо, что дали понять, что URI по-прежнему имеют стандартизованный синтаксис, хотя и более гибкий, чем URL-адреса. Сообщение в блоге Даниэля Мисслера (ссылка на который приведена в комментарии выше) упускает этот момент. - person bb010g; 10.07.2020

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

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

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

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

* Единое имя ресурса

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

person Greg    schedule 31.12.2009
comment
Полезно отметить фактический URN (чтобы увидеть, как он сравнивается с URL-адресом): urn: isbn: 0-486-27557-4 - person Michael Brewer-Davis; 31.12.2009
comment
@Michael - Насколько я понимаю, ISBN 0486275574 также называет текст и, таким образом, квалифицируется как URN. Я выбираю формат, который, как мне казалось, будет более знаком читателям. - person Greg; 31.12.2009
comment
Имеет ли смысл сказать, что хеш (например, SHA1) файла может быть URN для этого файла? - person johnsimer; 06.06.2016
comment
@johnsimer Не думайте, так как у вас может быть копия одного файла на том же компьютере, что приведет к одному и тому же хешу, и, следовательно, он не уникален. - person Dennis98; 06.02.2018

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

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

URI - /some/page.html

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

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

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

person Phil Sturgeon    schedule 31.12.2009
comment
Этот ответ может быть слишком упрощен, но посмотрите на контекст его вопроса. Ему будет полезнее болтовня о пространствах имен XML! - person Phil Sturgeon; 31.12.2009
comment
Этот ответ не только неверен, но и вводит в заблуждение. Оба примера являются URL-адресами. И поскольку каждый URL-адрес также является URI, это означает, что оба примера являются URI. Для демонстрации разницы между URI и URL это совершенно бесполезно. - person Jörg W Mittag; 31.12.2009
comment
В этом разница, что касается CodeIgniter. В каждом случае они используют слово URL или URI, это разница, о которой они говорят. Поэтому в большой схеме Интернета это не на 100% правильно, но в рамках вопроса OP (разница в CodeIgniter) этот ответ совершенно правильный. - person Phil Sturgeon; 11.01.2010
comment
@Phil Sturgeon - согласен, для целей этого вопроса, именно так CI различает URL и URI. - person Matt; 11.01.2010
comment
@Phil Sturgeon - для вопроса, ваш ответ вполне подходит - person Udders; 11.01.2010
comment
Это не правильно. @ JörgWMittag в основном прав. URL-адреса - это URI, и они полностью определены; поэтому URL-адрес в этом ответе - оба. Но /some/page.html не является URI. Это относительная ссылка, которая является своего рода ссылкой на URI. В сочетании с базовым контекстом URI он может быть преобразован в URI, но сам по себе не является URI. См. раздел 4.1 RFC 3986. CodeIgniter, вероятно, неправильно использует термины, и это следует отметить; Q (в том виде, в котором он сейчас редактируется) не оформлен как специфичный для CodeIgniter. - person Andrew Janke; 11.03.2014
comment
Когда я ответил на вопрос, он был помечен как #codeigniter. поэтому ответ был дан как таковой. - person Phil Sturgeon; 11.03.2014
comment
Кажется, не только CI, но и, по крайней мере, PHP $_SERVER['REQUEST_URI'] отличает это. - person Matmarbon; 06.07.2014
comment
Если /some/page.html не является URI, тогда это определенно не URL - он недостаточно полный, чтобы я мог найти ресурс. - person Kenney; 23.09.2014
comment
Для будущих людей, которые читают эти комментарии и сбиты с толку, как и я: этот ответ не был опубликован для этого вопроса. Этот вопрос никогда не имел отношения к CodeIgniter. Был повторяющийся вопрос, в котором конкретно упоминался CodeIgniter, который был закрыт, и все его ответы были перенесены на этот вопрос. Этот ответ был одним из тех, которые были перенесены из старого закрытого вопроса в этот защищенный. Тем не менее, я этот ответ вводит в заблуждение. Я проголосовал против - другие должны поступить так же, потому что в его новом доме это неправильно. Автор должен удалить его, иначе слияние будет отменено. - person ArtOfWarfare; 06.10.2014

Прежде всего избавьтесь от путаницы и упростите задачу, и вы все поймете.

URI => Uniform Resource Identifier Определяет полный адрес местоположения, имени или обоих ресурсов i-e.

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

URN => Uniform Resource Name Определяет имя ресурса.

Пример

У нас есть адрес 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

person Community    schedule 21.07.2017

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

введите описание изображения здесь

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

введите описание изображения здесь

person Gustavo Mori    schedule 16.10.2014
comment
Я считаю, что вторая иллюстрация неверна. Согласно спецификации url.spec.whatwg.org/#url-writing URL должен быть записан как относительный URL-адрес или как абсолютный URL-адрес, необязательно, за которым следует # и фрагмент. Итак, #posts идентификатор фрагмента может быть частью URL - person ruvim; 04.12.2014
comment
Эти две иллюстрации противоречат друг другу. - person patapouf_ai; 28.06.2015
comment
Разве URL-адрес не должен быть - thinkzarahatke.com, а urn - author / amty.html # posts? Пожалуйста, объясните мне, что я очень запутался. :( - person ; 19.09.2020

Identity = имя с местоположением

Каждый 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, news, ISBN - это URI. Источник

введите описание изображения здесь

URN:

  • Формат URN: urn:[namespace identifier]:[namespace specific string]
  • urn: и: стоять за себя.
  • Примеры:
  • урна: uuid: 6e8bc430-9c3a-11d9-9669-0800200c9a66
  • урна: ISSN: 0167-6423
  • урна: isbn: 096139210x
  • Amazon Resource Names (ARNs) is a uniquely identify AWS resources.
    • ARN Format : 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 / путь? запрос
  • ftp: // ip_server / путь
  • mailto: адрес электронной почты
  • новости: название-группы новостей
  • telnet: // ip_сервер /
  • file: // ip_server / path_segments
  • ldap: // hostport / dn? атрибуты? область? фильтр? расширения

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

person Premraj    schedule 23.12.2015
comment
Незначительная придирка: между [домен] и [порт] должно быть двоеточие. IE: example.com:1234 - person Rex Schrader; 01.03.2019

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

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

Есть два основных подмножества:

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

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

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

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

person Kevin Lowe    schedule 01.12.2011
comment
Нет, думаю, ты прав. Семантика URI vs URL vs URL vs URI-ref и т. Д. Бесполезна для большинства разработчиков только потому, что вызывает бессмысленные (непродуктивные, несущественные для принятия решений) дискуссии. Если бы Google API использовал redirect_url вместо redirect_uri, кому это было бы интересно? - person ; 06.04.2015

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

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

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

person Craig Wilson    schedule 06.10.2008
comment
URL-адреса не являются истинным подмножеством URI. Вы можете сделать пустые URL-адреса с символами [ и ], но не URI. - person Adam Gent; 16.05.2013
comment
Квадратные скобки недопустимы ни в URI, ни в URL. См. Этот вопрос, в котором много ссылок на спецификации: Разрешены ли квадратные скобки в URL-адресах? . Если в них фигурируют квадратные скобки, их следует закодировать. - person Stephen Ostermiller; 25.07.2015

Другой пример, который мне нравится использовать, когда я думаю об URI, - это атрибут xmlns XML-документа:

<rootElement xmlns:myPrefix="com.mycompany.mynode">
    <myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

В этом случае com.mycompany.mynode будет URI, который однозначно идентифицирует пространство имен myPrefix для всех элементов, которые его используют в моем XML-документе. Это НЕ URL-адрес, потому что он используется только для идентификации, а не для поиска чего-либо как такового.

person D.C.    schedule 31.12.2009

Это одно и то же. URI - это обобщение URL-адреса. Первоначально планировалось разделить URI на URL-адреса (адреса) и URN (имена), но тогда не было большой разницы между URL-адресом и URI, а http-URI использовались в качестве пространств имен, даже если они фактически не находили никаких ресурсов.

person Mark Cidade    schedule 06.10.2008
comment
Я думал, что все наоборот. URL-адрес относится к конкретному объекту, а URI может относиться к нему, концепции или чему-либо еще. - person Chris Charabaruk; 07.10.2008
comment
URL-адрес определяет местонахождение ресурса и является своего рода URI, который идентифицирует ресурс. - person Mark Cidade; 07.10.2008
comment
Верно только то, что это одно и то же, потому что определение URL-адреса со временем изменилось. Раньше URL-адреса были определенным типом URI, но из-за возникшей путаницы W3C переопределил URL-адрес для обозначения URI. - person Stephen Ostermiller; 17.04.2015

Из-за трудностей с четким различением URI и URL, насколько я помню, W3C больше не делает различий между URI и URL (http://www.w3.org/Addressing/).

person manuel aldana    schedule 31.12.2009
comment
Возможно, я пропустил эту часть, но я не вижу никаких ссылок в предоставленной ссылке на них, удаляющих различие между URL-адресом и URI, только признавая путаницу и желая, чтобы спецификации, которые неправильно ссылаются на URL-адрес, были обновлены, чтобы вместо этого ссылаться на URI. - person Tim Gautier; 10.01.2018

«URI

URI, URL, URN

Как показано на изображении выше, здесь задействованы три различных компонента. При обсуждении подобных вопросов обычно лучше обратиться к источнику, поэтому вот выдержка из Tim Berners-Lee, et. al. в RFC 3986: унифицированный идентификатор ресурса (URI): общий синтаксис:

Унифицированный идентификатор ресурса (URI) - это компактная последовательность символов, которая идентифицирует абстрактный или физический ресурс.

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

person Adiii    schedule 02.06.2016

URI - это своего рода суперкласс URL-адресов и URN. В Википедии есть прекрасная статья о них со ссылками на нужный набор RFC.

person André    schedule 06.10.2008

Википедия предоставит всю необходимую информацию здесь. Цитата из http://en.wikipedia.org/wiki/URI:

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

person Peter Boughton    schedule 06.10.2008

URL

URL-адрес - это специализация URI, которая определяет сетевое расположение определенного ресурса. В отличие от URN, URL-адрес определяет, как можно получить ресурс. Мы используем URL-адреса каждый день в виде http://example.com и т. Д. Но URL-адрес не обязательно должен быть URL-адресом HTTP, он также может быть ftp://example.com и т. Д.

URI

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

Разница между URL и URI

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

person Sujit    schedule 08.09.2012

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

URL-адрес - это специализация URI, которая определяет сетевое расположение определенного ресурса. В отличие от URN, URL-адрес определяет, как можно получить ресурс. Мы используем URL-адреса каждый день в виде http://stackoverflow.com и т. Д. Но URL-адрес не обязательно должен быть URL-адресом HTTP, это может быть ftp://example.com и т. д.

person Swapnil    schedule 31.12.2009

Согласно RFC 3986, URI состоят из следующих частей:

scheme://authority/path?query

URI описывает протокол доступа к ресурсу (путь) или приложению (запрос) на сервере (полномочия).

Введите описание изображения здесь

Все URL-адреса являются URI, и все URN являются URI, но все URI не являются URL-адресами.

Пожалуйста, обратитесь для получения более подробной информации:

Википедия

person Prashanth Sams    schedule 28.08.2014
comment
Это не учит меня чему-либо, что не охвачено другими ответами, которым не менее 6 лет, которые гораздо более полны и фактически пытаются объяснить, как отличить URI от URL-адресов. - person ccjmne; 06.09.2014
comment
Важно отметить, что изображение представляет собой диаграмму Венна, хотя она не похожа на типичную. Я видел, как люди пытались интерпретировать его как часть URL-адреса. Эта диаграмма не говорит, что URI начинаются с URL и заканчиваются URN. - person Stephen Ostermiller; 17.04.2015

Хотя термины URI и URL строго определены, многие используют эти термины для других целей, чем они определены.

Возьмем, к примеру, Apache. Если http://example.com/foo запрашивается с сервера Apache, у вас будут следующие переменные среды установленный:

  • REDIRECT_URL: /foo
  • REQUEST_URI: /foo

При включенном mod_rewrite у вас также будут следующие переменные:

  • REDIRECT_SCRIPT_URL: /foo
  • REDIRECT_SCRIPT_URI: http://example.com/foo
  • SCRIPT_URL: /foo
  • SCRIPT_URI: http://example.com/foo

Это могло быть причиной некоторой путаницы.

person Gumbo    schedule 31.12.2009

См. этот документ. Конкретно,

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

На самом деле, это не очень четкий термин.

person avpx    schedule 31.12.2009

Прочитав сообщения, я нахожу очень важные комментарии. Короче говоря, путаница между определениями URL и URI частично основана на том, какое определение зависит от того, от какого, а также на неформальном использовании слова URI при разработке программного обеспечения.

По определению URL - это подмножество URI [RFC2396]. URI содержит URN и URL. И URI, и URL-адрес имеют свой собственный синтаксис, который присваивает им статус URI или URL-адреса. URN предназначены для уникальной идентификации ресурса, а URL-адреса - для поиска ресурса. Обратите внимание, что у ресурса может быть несколько URL-адресов, но только один URN. [RFC2611]

Как веб-разработчики и программисты мы почти всегда будем иметь дело с URL-адресом и, следовательно, с URI. Теперь URL-адрес специально определен для того, чтобы иметь схему всех частей: конкретная часть схемы, например, https://stackoverflow.com/questions. Это URL-адрес, а также URI. Теперь рассмотрим относительную ссылку, встроенную в страницу, например ../index.html. Это уже не URL-адрес по определению. Это все еще то, что называется «URI-ссылкой» [RFC2396].

Я считаю, что когда слово URI используется для обозначения относительных путей, на самом деле имеется в виду «ссылка на URI». Таким образом, неформально программные системы используют URI для ссылки на относительный путь и URL для абсолютного адреса. Таким образом, в этом смысле относительный путь больше не является URL-адресом, но по-прежнему является URI.

person paul r    schedule 06.10.2012

Вот мое упрощение:

URN: уникальное имя ресурса, то есть "что" (например, urn: issn: 1234-5678). Это должно быть уникальным ... поскольку никакие два разных документа не могут иметь одну и ту же урну. Немного похоже на "uuid"

URL: "где" его найти (например, https://google.com/pub?issnid=1234-5678 .. или ftp://somesite.com/doc8.pdf)

URI: может быть URN или URL. Это нечеткое определение стало возможным благодаря RFC 3986, разработанному W3C и IETF.

Определение URI изменилось с годами, поэтому для большинства людей имеет смысл запутаться. Однако теперь вы можете утешиться тем, что можете ссылаться на http://somesite.com/something как на либо URL-адрес, либо URI ... и вы будете правы в любом случае (по крайней мере, пока ...)

person jjolla    schedule 29.08.2012

Мне было интересно примерно то же самое, и я нашел это: http://docs.kohanaphp.com/helpers/url.

Вы можете увидеть наглядный пример, используя метод url::current(). Если у вас есть этот URL: http://example.com/kohana/index.php/welcome/home.html?query=string, то при использовании url:current() вы получите URI, который, согласно документации, выглядит следующим образом: welcome / home

person Community    schedule 15.05.2010
comment
Это неверный ответ. URI не является частью URL-адреса. Скорее URL-адреса - это тип URI. Кроме того, ссылка в этом ответе не работает (и я не могу найти подходящую замену). - person Stephen Ostermiller; 17.04.2015

Чтобы ответить на этот вопрос, я опираюсь на ответ, который я изменил на другой вопрос. Хорошим примером URI является то, как вы идентифицируете ресурс Amazon S3. Давайте:

s3://www-example-com/index.html [рис. 1]

который я создал как кешированную копию

http://www.example.com/index.html [рис. 2]

в центре обработки данных Amazon S3-US-West-2.

Даже если StackOverflow позволит мне сделать гиперссылку на s3:// протокол , это не поможет вам найти ресурс. Поскольку он идентифицирует ресурс, рис. 1 - действительный URI. Это также действительный URN, потому что Amazon требует, чтобы корзина (их термин для authority части URI) была уникальной для всех центров обработки данных. Его полезно найти, но он не указывает центр обработки данных. Поэтому он не работает как URL.

Итак, чем в этом случае отличаются URI, URL и URN?

ПРИМЕЧАНИЕ. RFC 3986 определяет URI как scheme://authority/path?query#fragment.

person Bruno Bronosky    schedule 10.03.2015

URI возникли из-за необходимости идентифицировать ресурсы в Интернете, и другие ресурсы Интернета, такие как электронные почтовые ящики, единообразным и последовательным образом. Таким образом, можно ввести новый тип URI widget: для идентификации ресурсов widget или использовать URI tel:, чтобы веб-ссылки вызывали телефонные звонки производиться при вызове.

Некоторые URI предоставляют информацию для поиска ресурса (например, имя хоста DNS и путь на этом компьютере), а некоторые используются как чистые имена ресурсов. URL зарезервирован для идентификаторов, которые являются указателями ресурсов, включая URL-адреса http, такие как http://stackoverflow.com, который определяет веб-страница по заданному пути на хосте. Другой пример - URL-адреса mailto, такие как mailto: [email protected], который идентифицирует почтовый ящик по данному адресу.

URN - это URI, которые используются как чистые имена ресурсов, а не как указатели. Например, URI: mid: [email protected] - это URN, который идентифицирует сообщение электронной почты, содержащее его в поле «Message-Id». URI служит для отличия этого сообщения от любого другого сообщения электронной почты. Но он сам по себе не предоставляет адрес сообщения ни в одном магазине.

person dpant    schedule 10.03.2012

Лучшее (техническое) резюме imo - это

IRI, URI, URL, URN и их отличия от Яна Мартина Кейла:

IRI, URI, URL, URN и их различия

Каждый, кто имеет дело с Семантической сетью, постоянно сталкивается с терминами IRI, URI, URL и URN. Тем не менее, я часто замечаю некоторую путаницу в их точном значении. И, конечно же, это заметили и другие (см., Например, RFC3305 или поиск в Google). Если честно, я даже сам вначале запутался. Но на самом деле вопрос не такой уж и сложный. Давайте посмотрим на определения упомянутых терминов, чтобы увидеть, в чем различия:

URI

Универсальный идентификатор ресурса - это компактная последовательность символов, которая идентифицирует абстрактный или физический ресурс. Набор символов ограничен US-ASCII, за исключением некоторых зарезервированных символов. Символы вне набора разрешенных символов могут быть представлены с использованием процентного кодирования. URI может использоваться как указатель, имя или и то, и другое. Если URI является указателем, он описывает основной механизм доступа к ресурсу. Если URI - это имя, он идентифицирует ресурс, давая ему уникальное имя. Точные спецификации синтаксиса и семантики URI зависят от используемой схемы, которая определяется символами перед первым двоеточием. [RFC3986]

URN

Унифицированное имя ресурса - это URI в урне схемы, предназначенный для использования в качестве постоянного, не зависящего от местоположения идентификатора ресурса. Исторически этот термин также относился к любому URI. [RFC3986] URN состоит из идентификатора пространства имен (NID) и специальной строки пространства имен (NSS): urn :: Синтаксис и семантика NSS специфичны для каждого NID. Помимо зарегистрированных NID, существует еще несколько NID, которые не прошли официальную регистрацию. [RFC2141]

URL

Унифицированный указатель ресурса - это URI, который, помимо идентификации ресурса, предоставляет средства поиска ресурса путем описания его основного механизма доступа [RFC3986]. Поскольку не существует точного определения URL с помощью набора схем, «URL - полезная, но неформальная концепция», обычно относящаяся к подмножеству URI, которые не содержат URN [RFC3305].

IRI

Интернационализированный идентификатор ресурса определяется аналогично URI, но набор символов расширяется до универсального кодированного набора символов. Следовательно, он может содержать любые латинские и нелатинские символы, кроме зарезервированных символов. Вместо расширения определения URI был введен термин IRI, чтобы учесть четкое различие и избежать несовместимости. IRI предназначены для замены URI при идентификации ресурсов в ситуациях, когда поддерживается универсальный набор кодированных символов. По определению каждый URI - это IRI. Кроме того, существует определенное сюръективное сопоставление IRI с URI: каждый IRI может быть сопоставлен точно с одним URI, но разные IRI могут отображаться на один и тот же URI. Следовательно, обратное преобразование из URI в IRI может не дать исходный IRI. [RFC3987]

Обобщая можно сказать:

IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)

Выводы по проблемам семантической паутины

RDF явно позволяет использовать IRI для именования объектов [RFC3987]. Это означает, что мы можем использовать почти каждый символ в именах сущностей. С другой стороны, нам часто приходится иметь дело с программным обеспечением раннего состояния. Таким образом, маловероятно, что возникнут проблемы с использованием символов, отличных от ASCII. Поэтому я предлагаю избегать имен объектов, отличных от URI, и рекомендовать использовать http URI [LINKED-DATA]. Короче говоря: используйте только URL-адреса для именования своих сущностей. Конечно, мы можем ссылаться на существующие сущности, названные URN. Однако нам следует избегать создания новых идентификаторов такого типа.

person Mischa    schedule 05.04.2020

Легко объяснить:

Предположим следующее

URI - это ваше имя

URL - это ваш адрес с вашим именем для связи с вами.

  • меня зовут лойола

    Лойола - это URI

  • мой адрес TN, Ченнаи 600001.

TN, Ченнаи 600 001, Лойола - URL

Надеюсь, вы понимаете,

Теперь давайте посмотрим на точный пример

http://www.google.com/fistpage.html

в приведенном выше примере вы можете связаться со страницей с именем firstpage.html (URI), используя следующую команду http://www.google.com/fistpage.html (URL).

Следовательно, URI - это подмножество URL, но не наоборот.

person loyola    schedule 10.02.2015
comment
Этот ответ вводит в заблуждение. Цитата из Википедии Унифицированное имя ресурса (URN) действует как имя человека, в то время как унифицированный указатель ресурса (URL) напоминает почтовый адрес этого человека. Другими словами: URN определяет идентичность элемента, а URL-адрес предоставляет метод для его поиска. Также как URN, так и URL-адреса являются URI. - person Vegan Sv; 28.12.2015

Я нашел:


Единый идентификатор ресурса (URI) представляет собой некоторую общую картину. Вы можете разделить URI / URI, которые могут быть классифицированы как локаторы (унифицированные указатели ресурсов - URL), или как имена (единое имя ресурса - URN), или и то, и другое. Таким образом, URN функционирует как имя человека, а URL-адрес отображает адрес этого человека. Короче говоря, URN определяет идентичность элемента, в то время как URL-адрес определяет метод его поиска, наконец, инкапсулируя эти две концепции, является URI

person Rakeeb Rajbhandari    schedule 11.08.2013

Ответ неоднозначный. В Java это часто используется таким образом:

Унифицированный указатель ресурса (URL) - это термин, используемый для идентификации интернет-ресурса, включая схему (http, https, ftp, новости и т. Д.). Например, В чем разница между URI, URL-адресом и URN?

Универсальный идентификатор ресурса (URI) используется для идентификации одного документа на веб-сервере: например, / questions / 176264 / whats-the-difference-between-a-uri-and-a-url.

В сервлетах Java URI часто ссылается на документ без контекста веб-приложения.

person Freeman    schedule 27.04.2011
comment
В этом разница между абсолютным и относительным URL. Он не объясняет отношения URI к URL и URN. - person Holger Just; 08.09.2012
comment
Собственно, это точные примеры. В Интернете это очень часто разница. - person Zenexer; 11.11.2013

Не забывайте URN. URI и URL-адреса являются URN. URL-адреса имеют местоположение:

URI: foo
URL: http://some.domain.com/foo
URL: http://some.domain.com:8080/foo
URL: ftp://some.domain.com/foo

Все они URN.

person Rick O'Shea    schedule 07.03.2016
comment
Это все URN? Я все еще не уверен в семантике каждого из них, но синтаксически я подумал, что URN не имеет косой черты (//). См. en.wikipedia.org/wiki/Uniform_Resource_Identifier Или это отсутствие // просто типичного регистр, а не синтаксическое требование URN? - person Craig Silver; 12.11.2016