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

4366

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

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

Шон Макмэйнс
источник
158
URL более конкретен, чем URI.
Mk12
30
Для веб-мастеров возникает
hippietrail 21.12.12
162
Мини-диаграмма Венна:( URIs ( URLs ) )
icc97
30
Кажется, что URI против URL все еще сильно путают даже те, кто пытался ответить на вопрос. Всем было бы полезно увидеть практические примеры URL, которые не являются URI, примеры URI, которые не являются URL, и примеры, которые являются URL и URI.
Деннис
30
Кэти: Это твоя собака? Боб: «Было бы правильнее называть его клыком». Кэти: «Нет, он собака. Вы, сэр, педант».
Йоджимбо,

Ответы:

1747

Из RFC 3986 :

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

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

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

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

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

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

Джон Скит
источник
15
Только URI со схемой urn: являются URN. URI может быть классическим URL, URN или просто URI, который не начинается с «urn:» и не ссылается на местоположение ресурса.
Марк Сидаде
18
Не « все URL являются URI ». Это зависит от толкования RFC. Например, в Java парсер URI не нравится [или, ]и это потому, что спецификация говорит «не должен» и не «не должен».
Адам Гент
5
@AdamGent: RFC 3986 1.1.3: «URI может быть далее классифицирован как локатор, имя или оба». Таким образом, если URL является специальным видом URI, это означает, что каждый URL является URI. Не так ли?
Юбер
14
@AdamGent: Это звучит как странная реализация Java, а не как нормативная. Сам java.net.URIдокумент говорит "каждый URL является URI, абстрактно говоря, но не каждый URI является URL". И java.net.URLделает странные вещи, такие как проверка равенства URL-адресов путем преобразования имен хостов в IP-адреса (что, в первую очередь, противоречит RFC 3986 sec 6 и разбивает w виртуальных хостов). Я думаю, это просто означает, что стандартная библиотека Java имеет некоторое противоречивое поведение классов.
Эндрю Янке
3
@JonSkeet Может быть, просто нужно различать стандарты и реализации? Например, формально, согласно RFC, все URL-адреса являются URI. (Выдержка RFC). Но существующие реализации могут не полностью соответствовать спецификации, возможно, для совместимости, и могут использовать URL-адреса, которые недопустимы для RFC. И потому что это сложная область некоторые люди и документы могут использовать «URL» для обозначения чего-то отличного от указанного в RFC ». Вроде как, как большинство процедур проверки электронной почты не соответствуют определениям RFC.
Эндрю Янке
3842

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

Примеры

  • Роджер Пэйт

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

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

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

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

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

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

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

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

урны

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

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

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

Сообщество
источник
3
URNs are different from URLs in this rigid uniqueness constraintОзначает ли это, что URL не идентифицируют однозначно местоположение?
Евгений
30
Ответ Роджера дает хороший прагматичный совет. В качестве официального ответа я обращаюсь к W3C, который опубликовал « URI, URL и URN: пояснения и рекомендации » в 2001 году. В двух словах, W3C говорит, что современное мнение состоит в том, что все является URI. URL является неформальной концепцией, а не формальной концепцией. И путаница восходит к «классическому взгляду», который пытался жестко различать категории URI (из которых URL был одной категорией).
netjeff
5
..a Унифицированный указатель ресурса (URL) .. указывает, где идентифицированный ресурс доступен и механизм его получения . Другими словами, не существует такого понятия, как «относительный» URL?
Арне
9
Является ли «earth128: Edward-de-Leau / 6000000000569063853» (уникальное «я по множественному мультиверсу») URN, URL или URI?
Эдельвотер,
6
@edelwater: Я полагаю , то будет URI , как это только идентифицирует вас , но ничего не говорит о том , как добраться до вас, если вы имеете в виду earth128 не является какой - то средство межпланетных путешествий :)
user20358
671

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

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

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

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

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • 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 - Единое цитирование ресурсов

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

Стивен Остермиллер
источник
8
такое "C: \ myfile" - это URI, URL или URN? или ни один из них.
bvdb
12
Путь к файлу не является URL или URI, если вы не указали file://префикс. Хотя браузеры обычно обрабатывают пути к файлам без форматирования URL. Mozilla публикует свои тестовые примеры для файловых URL .
Стивен Остермиллер,
2
См. Раздел 1.1 RFC - «Единообразие обеспечивает несколько преимуществ. Оно позволяет использовать разные типы идентификаторов ресурсов в одном и том же контексте, даже если механизмы, используемые для доступа к этим ресурсам, могут различаться. Это позволяет унифицировать семантическую интерпретацию общих синтаксических соглашений. по различным типам идентификаторов ресурсов ... »
Стивен Остермиллер
Вы упомянули mailto:user@example.comв качестве URL, но другой ответ ниже говорит, что это URN? Какой правильный? Это и URN, и URL?
user31782
5
Этот ответ гораздо проще понять. Я могу ясно видеть реальные примеры URL-адресов и URN. И для любого, чтобы узнать больше об этом ... danielmiessler.com/study/url-uri
VE
253

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

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

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

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

* Единое название ресурса

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

Greg
источник
6
Полезно отметить фактический URN (чтобы сравнить его с URL): urn: isbn: 0-486-27557-4
Майкл Брюер-Дэвис,
2
@Michael - Насколько я понимаю, ISBN 0486275574текст также называется и, следовательно, квалифицируется как URN. Я выбираю формат, который, по моему мнению, был бы более знакомым для читателей.
Грег
2
Так имеет ли смысл говорить, что хеш (например, SHA1) файла может быть URN для этого файла?
johnsimer
@johnsimer Не думайте, так как вы можете иметь копию одного файла на одном компьютере, что приведет к тому же хешу, и поэтому он не уникален.
Dennis98
141

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

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

URI - /some/page.html

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

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

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

Фил Осетрина
источник
10
Этот ответ может быть слишком упрощенным, но посмотрите на контекст его вопроса. Ему будет более полезно, если вы будете болтать о пространствах имен XML!
Фил Осетрина
140
Этот ответ не только неверен, но и вводит в заблуждение. Оба примера являются URL-адресами. И поскольку каждый URL также является URI, это означает, что оба примера являются URI. В целях демонстрации различия между URI и URL, это абсолютно бесполезно.
Йорг Миттаг
12
Это разница в отношении CodeIgniter. В каждом случае они используют слово URL или URI, это различие, о котором они говорят. Следовательно, в грандиозной схеме Интернета это не на 100% правильно, а в рамках вопроса ОП (разница в CodeIgniter), этот ответ совершенно верен.
Фил Осетрина
12
Это не верно. @ JörgWMittag в основном на точке. URL - это URI, и они «полностью определены»; поэтому «URL» в этом ответе - оба. Но /some/page.htmlэто не URI. Это «относительный реф», который является своего рода «URI-ссылкой». В сочетании с базовым контекстом URI он может быть преобразован в URI, но сам по себе не является URI. См. Раздел 4.1 RFC 3986 . CodeIgniter, вероятно, использует неправильные термины, и это должно быть вызвано; Q (как отредактировано в настоящее время) не оформлено как специфичное для CodeIgniter.
Эндрю Янке
37
Для будущих людей, которые читают эти комментарии и так же растеряны, как и я: Этот ответ не был опубликован на этот вопрос. Этот вопрос никогда не был связан с CodeIgniter. Был дублирующий вопрос, в котором конкретно упоминался CodeIgniter, который был закрыт и все его ответы перенесены на этот вопрос. Этот ответ был одним из тех, которые были перенесены из старого закрытого вопроса в этот защищенный вопрос. Несмотря на это, я этот ответ вводит в заблуждение. Я понизил это - другие должны сделать то же самое, потому что в его новом доме это неправильно. Автор должен удалить его или слияние будет отменено.
ArtOfWarfare
92

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

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

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

Евгений Коньков
источник
66

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

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

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

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

Густаво Мори
источник
20
Я считаю, что вторая иллюстрация неверна. Согласно спецификации url.spec.whatwg.org/#url-writing URL-адрес должен быть записан как относительный URL-адрес или как абсолютный URL-адрес, за которым необязательно следует «#» и фрагмент. Таким образом, #postsидентификатор фрагмента может быть частью URL
ruvim
7
Две иллюстрации противоречат друг другу.
patapouf_ai
53

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

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

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

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

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

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

Кевин Лоу
источник
4
Нет, я думаю, что ты прав. Семантика URI против URL против URL против URI-ref и т. Д. Для большинства разработчиков бесполезна только потому, что она ведет к бессмысленным (непроизводительным, незначительным для принятия решений) дебатам. Если бы redirect_urlвместо этого использовался Google API redirect_uri, кому-нибудь было бы интересно?
53

Идентичность = имя с местоположением

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

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

URN:

  • Формат URN: urn:[namespace identifier]:[namespace specific string]
  • урна: и: постоять за себя.
  • Примеры :
    • Урна: UUID: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • Урна: ISSN: 0167-6423
    • Урна: 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, новости, telnet, файл, man, info, whatis, ldap ...
  • Примеры:

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

Premraj
источник
Незначительный спор: между [доменом] и [портом] должно быть двоеточие. IE: example.com:1234
Рекс Шредер,
42

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

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

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

Крейг Уилсон
источник
1
URL-адреса не являются истинным подмножеством URI. Вы можете сделать VAID URL, с символами [и , ]но не в URI.
Адам Гент
4
Квадратные скобки недопустимы ни в URI, ни в URL. Посмотрите на этот вопрос, который имеет много ссылок на спецификации: разрешены ли квадратные скобки в URL? , Когда квадратные скобки появляются в любом из них, они должны быть закодированы.
Стивен Остермиллер
35

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

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

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

ОКРУГ КОЛУМБИЯ
источник
28

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

Мануэль Алдана
источник
Возможно, я пропустил эту часть, но я не вижу никакой ссылки в предоставленной ссылке, чтобы удалить различие между URL и URI, только признавая путаницу и желая, чтобы спецификации, которые неправильно ссылаются на URL, были обновлены, чтобы ссылаться на URI вместо этого.
Тим Готье
27

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

Марк Сидаде
источник
Я думал, что это было наоборот. URL-адрес относится к конкретному объекту, а URI может ссылаться на него, концепцию или что-либо еще.
Крис Чарабарук
4
URL-адрес находит ресурс и является своего рода URI, который идентифицирует ресурс.
Марк Сидаде
Это правда, что это одно и то же, потому что определение URL менялось со временем. Раньше URL-адреса представляли собой определенный тип URI, но из-за возникшей путаницы W3C переопределил URL-адрес для обозначения URI.
Стивен Остермиллер,
25

URI и URL

URI, URL, URN

Как показано на рисунке выше, здесь есть три отдельных компонента. Обычно лучше всего обратиться к источнику при обсуждении подобных вопросов, так что вот отрывок из Тим Бернерс-Ли и др. и др. в RFC 3986: унифицированный идентификатор ресурса (URI): общий синтаксис:

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

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

Adiii
источник
21

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

Андре
источник
17

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

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

Питер Боутон
источник
16

URL

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

URI

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

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

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

Sujit
источник
15

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

scheme://authority/path?query

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

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

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

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

Википедия

Прашант Самс
источник
3
Это не учит меня ничему, что не охватывается другими ответами, которым по крайней мере 6 лет, и которые являются гораздо более полными и фактически пытаются объяснить, как отличить URI от URL.
ccjmne
2
Важно отметить, что изображение представляет собой диаграмму Венна, даже если она не выглядит типичной. Я видел, как люди пытаются интерпретировать это как «части URL». Эта диаграмма не говорит о том, что URI начинаются с URL и заканчиваются URN.
Стивен Остермиллер,
14

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

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

Swapnil
источник
11

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

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

  • 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

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

гумбо
источник
10

Смотрите этот документ . В частности,

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

Это не очень понятный термин, правда.

avpx
источник
10

Прочитав посты, я нахожу некоторые очень важные комментарии. Короче говоря, путаница между определениями 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.

Пол Р
источник
10

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

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 ... и вы будете правы в любом случае (по крайней мере, на данный момент). .)

jjolla
источник
9

Мне было интересно об этом и я нашел это: 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

dierre
источник
1
Этот ответ неверен. URI не является частью URL. Скорее URL-адреса являются типом URI. Кроме того, ссылка в этом ответе не работает (и я не могу найти подходящую замену.)
Стивен Остермиллер
8

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

Некоторые URI предоставляют информацию для определения местоположения ресурса (например, имя хоста DNS и путь на этом компьютере), а некоторые используются как чистые имена ресурсов. URL зарезервирован для идентификаторов , которые являются локаторы ресурсов , в том числе «HTTP» URL , такие как http://stackoverflow.com , который идентифицирует веб - страницу , на данном пути на хосте. Другой пример - это URL-адреса mailto, например mailto: fred@mail.org. , который идентифицирует почтовый ящик по указанному адресу.

URN - это URI, которые используются как чистые имена ресурсов, а не как локаторы. Например, URI: mid: 0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com - это URN, который идентифицирует сообщение электронной почты, содержащее его, в своем поле «Message-Id». URI служит для того, чтобы отличить это сообщение от любого другого сообщения электронной почты. Но он не предоставляет адрес сообщения в любом магазине.

dpant
источник
7

Чтобы ответить на этот вопрос, я опираюсь на ответ, который я изменил на другой вопрос . Хороший пример 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

Бруно Броноски
источник
6

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

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

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

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

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

    Лойола это URI

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

TN, Chennai 600 001, Loyola является URL

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

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

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

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

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

Лойола
источник
4
Этот ответ вводит в заблуждение. Цитата из Википедии "Унифицированное имя ресурса (URN) функционирует как имя человека, в то время как унифицированный указатель ресурса (URL) напоминает уличный адрес этого человека. Другими словами: URN определяет идентификатор элемента, в то время как URL предоставляет метод для поиска Это." Также URN и URL являются URI.
Вегетарианский св
4

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

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


источник
4

Я нашел:


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

Rakeeb Rajbhandari
источник
2

Лучшее (техническое) резюме ИМО это

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

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

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

URI

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

URN

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

URL

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

IRI

Интернационализированный идентификатор ресурса определяется аналогично с URI, но набор символов распространяется на Character Set Универсальный кодированный. Следовательно, он может содержать любые латинские и нелатинские символы, кроме зарезервированных символов. Вместо расширения определения 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. Однако мы должны избегать нового создания идентификаторов такого рода.

Mischa
источник