Люди говорят о URL, URI и URN, как будто это разные вещи, но они выглядят одинаково невооруженным глазом.
Каковы различия между ними?
Люди говорят о URL, URI и URN, как будто это разные вещи, но они выглядят одинаково невооруженным глазом.
Каковы различия между ними?
Из 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 не любит
[
или]
, и это потому, что спецификация говорит "не должен" и не "не должен".
Так что, к сожалению, вода мутится дальше.
Если вы еще не прочитали ответ роджера Пейта, я бы посоветовал сделать то же самое.
URI идентифицировать и URL найти; однако локаторы также являются идентификаторами, поэтому каждый URL-адрес также является URI, но есть URI, которые не являются URL-адресами.
Это мое имя, которое является идентификатором. Это похоже на URI, но не может быть URL-адресом, поскольку он ничего не говорит о моем местоположении или о том, как связаться со мной. В этом случае также случается идентифицировать как минимум 5 других людей только в США.
Это локатор, который является идентификатором для этого физического местоположения. Это похоже на URL и URI (поскольку все URL-адреса являются URI), а также идентифицирует меня косвенно как "резидент..". В этом случае он однозначно идентифицирует меня, но это изменится, если я получу соседа по комнате.
Я говорю "нравится", потому что эти примеры не соответствуют требуемому синтаксису.
От Wikipedia:
При вычислении Единый указатель ресурсов (URL) является подмножеством Унифицированного идентификатора ресурса (URI), который указывает, где доступен идентифицированный ресурс, и механизм его извлечения. В популярном использовании и во многих технических документах и устных дискуссиях часто неправильно используется как синоним URI,... [акцент мой]
Из-за этой общей путаницы многие продукты и документация неправильно используют один термин вместо другого, назначают свое собственное различие или используют их синонимом.
Мое имя, Роджер Пате, может быть как URN (Uniform Resource Name), за исключением тех, что гораздо более регламентировано и должно быть уникальным как по пространству, так и по времени.
Поскольку я в настоящее время разделяю это имя с другими людьми, он не глобально уникален и не подходит для URN. Однако, даже если никакая другая семья не использовала это имя, я назван в честь моего дедушки по отцовской линии, поэтому он по-прежнему не будет уникальным во времени. И даже если бы это было не так, возможность называть моих потомков после меня делает это непригодным как URN.
URN отличаются от URL-адресов в этом жестком ограничении уникальности, хотя оба они совместно используют синтаксис URI.
URI - это стандарт идентификации документов с использованием короткой строки из цифр, букв и символов. Они определены в RFC 3986 - Универсальный идентификатор ресурса (URI): общий синтаксис. URL, URN и URC - это все типы URI.
Содержит информацию о том, как извлечь ресурс из его местоположения. Например:
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:isbn:0451450523
для идентификации книги по номеру ISBN.urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66
глобально уникальный идентификаторurn:publishing:book
- пространство имен XML, которое идентифицирует документ как тип книги.URN могут идентифицировать идеи и концепции. Они не ограничиваются идентификацией документов. Когда URN действительно представляет документ, он может быть преобразован в URL "распознавателем". Затем документ можно загрузить с URL-адреса.
Указывает на метаданные о документе, а не на сам документ. Примером URC является тот, который указывает на исходный код HTML страницы, например: view-source:http://example.com/
Вместо того, чтобы размещать их в Интернете или называть их, данные могут быть помещены непосредственно в URI. Примером может быть data:,Hello%20World
.
В спецификации W3 для HTML говорится, что href
тега привязки может содержать URI, а не только URL. Вы должны быть в состоянии ввести URN, такой как <a href="urn:isbn:0451450523">
. Ваш браузер затем разрешит этот URN в URL и загрузит книгу для вас.
Не то, чтобы я знал, но современный веб-браузер реализует схему URI данных.
Нет. Как относительные, так и абсолютные URL-адреса являются URL-адресами (и URI-адресами).
Нет. Оба URL-адреса с параметрами запроса и без них являются URL-адресами (и URI).
Нет. Оба URL-адреса с идентификаторами фрагментов и без них являются URL-адресами (и URI).
Нет. URL определены как строгое подмножество URI. Если синтаксический анализатор допускает символ в URL, но не в URI, в анализаторе есть ошибка. Спецификации подробно описывают, какие символы разрешены в каких частях URL и URI. Некоторые символы могут быть разрешены только в некоторых частях URL, но одни только символы не являются разницей между URL и URI.
Да. W3C осознал, что в этом есть куча путаницы. Они выпустили документ с разъяснением URI, в котором говорится, что теперь можно использовать термины URL и URI взаимозаменяемо (чтобы обозначать URI). Больше не нужно строго сегментировать URI на разные типы, такие как URL, URN и URC.
Определение URN теперь слабее, чем то, что я изложил выше. В самом последнем RFC по URI говорится, что любой URI теперь может быть URN (независимо от того, начинается ли он с urn:
), если он имеет "свойства имени". То есть: он глобально уникален и постоянен, даже когда ресурс перестает существовать или становится недоступным. Пример: URI, используемые в типах документов HTML, таких как http://www.w3.org/TR/html4/strict.dtd
. Этот URI будет по-прежнему называть HTML4 переходным типом документа, даже если страница на веб-сайте w3.org была удалена.
Вкратце: идентифицируется URI, URL идентифицирует и находит.
Рассмотрим конкретное издание пьесы Шекспира "Ромео и Джульетта", из которых у вас есть цифровая копия в вашей домашней сети.
Вы можете идентифицировать текст как urn:isbn:0-486-27557-4
.
Это будет URI, но более конкретно URN *, потому что он называет текст.
Вы также можете идентифицировать текст как file://hostname/sharename/RomeoAndJuliet.pdf
.
Это также будет URI, но более конкретно URL, потому что он находит текст.
* Единое имя ресурса
(Обратите внимание, что мой пример адаптирован из Wikipedia)
Это очень хорошо написанные, но долгожданные ответы. Вот разница , что касается CodeIgniter:
URL - http://example.com/some/page.html
URI -/some/page.html
Проще говоря, URL-адрес - это полный способ указать любой ресурс в любом месте и может иметь разные протоколы, такие как FTP, HTTP, SCP и т.д.
URI - это ресурс в текущем домене, поэтому ему требуется меньше информации.
В каждом случае, когда CodeIgniter использует URL-адрес слова или URI, это различие, о котором они говорят, хотя в грандиозной схеме Интернета это не на 100% правильно.
Прежде всего выведите свой разум из смятения и сделайте это просто, и вы поймете.
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
URI → Унифицированный идентификатор ресурса
URL → Единый указатель ресурса
URN → Унифицированное имя ресурса
Разница между URI, URL и URN
1) Каждый URL и URN является URI, потому что URI является надмножеством как URL, так и URN.
2) URL включает протокол, например. http://, ftp://вместе с местоположением для определения ресурса, например. http://www.blogspot.com/abc.html.
3) URN - это однозначный способ идентификации ресурса. Номера ISBN являются наилучшими примерами URN
Небольшое дополнение к уже опубликованным ответам, здесь диаграмма Венна для подведения итогов теории (от Prateek Joshi beautiful объяснение):
И пример (также с сайта Prateek):
Это одна из самых запутанных и, возможно, нерелевантных тем, с которыми я столкнулся как веб-профессионал.
Как я понимаю, URI - это описание чего-то, следующего за принятым форматом, который может определять как уникальное имя (идентификацию) чего-либо, так и его местоположение.
Существует два основных подмножества - URL-адреса, которые определяют местоположение (особенно для браузера, пытающегося найти веб-страницу) и URN, которые определяют уникальное имя.
Я склонен думать о URN как о сходстве с GUID. Это просто стандартизованная методология предоставления уникальных имен для вещей. Как и в объявлении пространства имен, которое использует название компании - это не так, как есть ресурс, сидящий на сервере где-то, чтобы соответствовать этой строке текста - он просто однозначно идентифицирует что-то.
Я также стараюсь полностью избегать термина URI и обсуждать вещи только с точки зрения URL или URN, если это необходимо, потому что это вызывает столько путаницы. Вопрос, который мы должны действительно пытаться ответить людям, - это не столько семантика, сколько то, как определить, когда встречаются термины, есть ли в них какая-либо практическая разница, которая изменит подход к ситуации программирования. Например, если кто-то поправляет меня в разговоре и говорит: "О, это не URL-адрес URI", я знаю, что они полны этого. Если кто-то говорит "мы используем URN для определения ресурса", я, скорее всего, пойму, что мы называем его однозначно, а не размещаем его на сервере.
Если я ухожу из базы - пожалуйста, дайте мне знать!
Identifier = Name + Location
Каждый URL (U niform R esource L ocator) является URI (U niform R esource Я средство для чистки зубов), абстрактно говоря, но каждый URI не является URL. Существует еще одна подкатегория URI - URN (U niform R esource N ame), который является именованным ресурсом, но не указывает, как их найти, например mailto, новости, ISBN - это URI. Источник
URN:
urn:[namespace identifier]:[namespace specific string]
arn:partition:service:region:account-id:resource
URL:
[scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
Аналогия:
Чтобы связаться с человеком: управление автомобилем (протокол других SMS, электронная почта, телефон), адрес (имя хоста, другой номер телефона, emailid) и имя человека (имя объекта с относительным путем).
URI = > http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
URL - это подмножество URI (в котором также содержатся URN).
В принципе, URI является общим идентификатором, где URL-адрес указывает местоположение, а URN указывает имя.
Другим примером, который я хотел бы использовать, когда думают об URI, является атрибут xmlns документа XML:
<rootElement xmlns:myPrefix="com.mycompany.mynode">
<myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>
В этом случае com.mycompany.mynode будет URI, который однозначно идентифицирует пространство имен "myPrefix" для всех элементов, которые используют его в моем XML-документе. Это НЕ URL-адрес, потому что он используется только для идентификации, а не для того, чтобы найти что-то само по себе.
Из-за трудностей с четким различием между URI и URL-адресом, насколько я помню, W3C не имеет никакого отношения к URI и URL-адресу (http://www.w3.org/Addressing/).
Они то же самое. URI - это обобщение URL-адреса. Первоначально URI планировалось разделить на URL-адреса (адреса) и URN (имена), но тогда было мало различий между URL-адресом и URI, а http-URI использовались в качестве пространств имен, хотя они фактически не находили никаких ресурсов.
URI, URL, URN
Как видно из приведенного выше изображения, здесь играют три различных компонента. Обычно лучше всего перейти к источнику при обсуждении таких вопросов, так что это выдержка из Тима Бернерса-Ли и др. и др. в RFC 3986: Единый идентификатор ресурса (URI): общий синтаксис:
Единый идентификатор ресурса (URI) представляет собой компактную последовательность символы, которые идентифицируют абстрактный или физический ресурс.
URI можно дополнительно классифицировать как локатор, имя или и то, и другое. термин "Единый указатель ресурсов" (URL) относится к подмножеству URI что в дополнение к определению ресурса определение ресурса путем описания его механизма первичного доступа (например, его местоположение сети).
URI - это класс суперкласса URL и URN. Wikipedia имеет прекрасную статью о них со ссылками на правильный набор RFC.
Википедия предоставит всю необходимую вам информацию. Цитата из http://en.wikipedia.org/wiki/URI:
URL-адрес - это URI, который помимо идентификации ресурса предоставляет средства для выполнения или получения представления ресурса, описывая его механизм первичного доступа или "местоположение" сети.
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 - правильный термин.
Согласно RFC 3986, URI состоят из следующих частей:
scheme://authority/path?query
URI описывает протокол для доступа к ресурсу (путь) или приложению (запрос) на сервере (полномочия).
Все URL-адреса являются URI, и все URN являются URI, но все URI не являются URL-адресами.
Пожалуйста, обратитесь за более подробной информацией:
URI идентифицирует ресурс либо по местоположению, либо по имени, или по обоим. Чаще всего большинство из нас используют URI, которые определяют местоположение для ресурса. Тот факт, что URI может идентифицировать ресурсы как по имени, так и по местонахождению, на мой взгляд приводит к большой путанице. URI имеет две специализации, известные как URL и URN.
URL-адрес - это спецификация URI, которая определяет сетевое расположение определенного ресурса. В отличие от URN, URL-адрес определяет способ получения ресурса. Мы используем URL-адреса каждый день в форме /fooobar.com/... и т.д. Но URL-адрес не должен быть URL-адресом HTTP, он может быть ftp://example.com
и т.д.
Хотя термины 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
Это может быть причиной некоторой путаницы.
Смотрите этот документ. В частности,
URL - это тип URI, который идентифицирует ресурс через представление его основного механизма доступа (например, его "местоположение" в сети), а не по некоторым другим атрибутам, которые он может иметь.
Это не очень четкий термин, на самом деле.
Прочитав сообщения, я найду очень важные комментарии. Короче говоря, путаница между определениями URL и URI основана частично на том, какое определение зависит от того, какое и неформальное использование слова URI в разработке программного обеспечения.
По определению URL-адрес является подмножеством URI [RFC2396]. URI содержат URN и URL. И URI, и каждый URL имеют свой собственный специфический синтаксис, который предоставляет им статус URI или URL. URN предназначены для уникальной идентификации ресурса, а URL - для поиска ресурса. Обратите внимание, что ресурс может иметь более одного URL-адреса, но только один URN. [RFC2611]
Как веб-разработчики и программисты, мы почти всегда будем касаться URL и, следовательно, URI. Теперь URL определен специально для того, чтобы иметь всю схему частей: специфичная для схемы часть, например, fooobar.com/questions/.... Это URL, и это также URI. Теперь рассмотрим относительную ссылку, встроенную в страницу, такую как../index.html. Это больше не URL по определению. Это еще то, что называется "URI-ссылкой" [RFC2396].
Я считаю, что когда слово URI используется для обозначения относительных путей, "URI-reference" на самом деле является тем, о чем думают. Поэтому неофициально, программные системы используют URI для ссылки на относительный путь и URL для абсолютного адреса. Таким образом, в этом смысле относительный путь больше не является URL-адресом, а все еще URI.
Мне было интересно об одном и том же, и я нашел это: 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
Вот мое упрощение:
URN: уникальное имя ресурса, то есть "что" (например, urn: issn: 1234-5678). Это должно быть уникальным.. так как в двух разных документах не может быть одинаковой урны. Немного похоже на "uuid"
URL: "where", чтобы найти его (например, 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... вы будете в любом случае (по крайней мере, в любом случае...)
URI возникли из-за необходимости идентифицировать ресурсы в Интернете, и других интернет-ресурсах, таких как электронные почтовые ящики единообразным и последовательным способом. Таким образом, можно ввести новый тип виджетов: URI для идентификации ресурсов виджетов или использовать tel: URI, чтобы иметь веб-ссылки, вызывающие вызовы по телефону при вызове.
Некоторые URI предоставляют информацию для поиска ресурса (например, имя хоста DNS и путь на этом компьютере), в то время как некоторые используются как чистые имена ресурсов. URL зарезервирован для идентификаторов, которые являются локаторами ресурсов, включая URL-адреса http, такие как http://stackoverflow.com, который идентифицирует веб-страницу по указанному пути на гостья. Другим примером является URL-адрес mailto, например mailto: [email protected], который идентифицирует почтовый ящик по указанному адресу.
URNs - это URI, которые используются как имена чистых ресурсов, а не локаторы. Например, URI: mid: [email protected] - это URN, который идентифицирует сообщение электронной почты, содержащее его в поле "Message-Id". URI служит для отличия этого сообщения от любого другого сообщения электронной почты. Но он сам не предоставляет адрес сообщения в любом магазине.
Легко объяснить:
Предположим, что
URI - ваше имя
URL - это ваш адрес с вашим именем для связи с вами.
Меня зовут Лойола
Лойола - это URI
мой адрес - TN, Chennai 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, но не наоборот.
Чтобы ответить на это, я опишу ответ, который я изменил на другой вопрос. Хорошим примером URI является то, как вы идентифицируете ресурс Amazon S3. Пусть возьмем:
s3://www-example-com/index.html
[рис. 1]суб >
который я создал как кешированную копию
http://www.example.com/index.html
[рис. 2]суб >
в центре данных Amazon S3-US-West-2.
Даже если StackOverflow позволит мне гиперссылку на схему s3://
protocol, она не будет Вы хорошо можете найти ресурс. Поскольку он идентифицирует ресурс, рис. 1 является допустимым URI. Это также действительный URN, потому что Amazon требует, чтобы ведро (их член для части authority
URI) было уникальным в центрах обработки данных. Это полезно для определения местоположения, но это не указывает на центр данных. Поэтому он не работает как URL-адрес.
Итак, как URI, URL и URN отличаются в этом случае?
ПРИМЕЧАНИЕ. RFC 3986 определяет URI как scheme://authority/path?query#fragment
Я нашел:
Единый идентификатор ресурса (URI) представляет собой нечто большое. Вы можете разделить URI/URIs, которые можно классифицировать как локаторы (единые идентификаторы ресурсов - URL) или имена (унифицированное имя ресурса - URN) или оба. Таким образом, в основном URN функционирует как имя человека, а URL-адрес изображает адрес этого человека. Короче говоря, URN определяет идентификатор элемента, в то время как URL-адрес определяет метод его нахождения, наконец, инкапсуляция этих двух понятий - это URI
Единый идентификатор ресурса (URI) представляет собой строку символов, которая идентифицирует интернет-ресурс.
Наиболее распространенным URI является Единый указатель ресурса (URL), который идентифицирует адрес домена в Интернете. Другим, не очень распространенным типом URI является Universal Resource Name (URN).