Вопрос: В чем разница между URI, URL-адресом и URN?


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

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


3652


источник


Ответы:


Из RFC 3986 :

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

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

EDIT: Я думал, что все URL-адреса являются допустимыми URI, но в соответствии с комментариями:

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

Так что, к сожалению, грядет вода.

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


1496



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

Примеры

  • Роджер Пате

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

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

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

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

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

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

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

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

урны

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

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

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


3502



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 действительно представляет документ, его можно преобразовать в URL-адрес с помощью «resolver». Затем документ можно загрузить с 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 будет продолжать называть переходный doctype HTML4, даже если страница на веб-сайте w3.org была удалена.


URI/URL Venn Diagram


461



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

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

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

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

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

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


231



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

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

URI - /some/page.html

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

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

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


124



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

enter image description here

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

enter image description here


63



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

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

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

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

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

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


52



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

URL's are a subset of URI's (which also contain URNs).

Basically, a URI is a general identifier, where a URL specifies a location and a URN specifies a name.


41



Another example I like to use when thinking about URIs is the xmlns attribute of an XML document:

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

In this case com.mycompany.mynode would be a URI that uniquely identifies the "myPrefix" namespace for all of the elements that use it within my XML document. This is NOT a URL because it is only used to identify, not to locate something per se.


35