Питання Яка різниця між URI, URL-адресою та URN?


Люди говорять про URL-адресас, URIS і УРНяк будто вони різні речі, але вони виглядають однаково неозброєним оком.

Які відмінні відмінності між ними?


3710
2017-10-06 21:26


походження


URL-адреса більш конкретна, ніж URI. - mk12
Тор веб-майстри беруть на це питання: Яка різниця між URI та URL-адресою? - hippietrail
Діаграма міні Венна: ( URIs ( URLs ) ) - icc97
Там, як і раніше, є багато непорозумінь щодо URI та URL-адреси, навіть тих, хто намагався відповісти на запитання. Це буде корисним для всіх, щоб побачити практичні приклади URL-адрес, які не є URI, приклади URI, які не є URL-адресами, а також приклади URL-адрес і URI - Dennis
Кеті: "Це твоя собака?" Боб: "Було б більш правильно називати його собакою". Кеті: "Ні, він собака, ти, сей, педан". - Yojimbo


Відповіді:


Від RFC 3986:

URI може також класифікуватися як локатор, ім'я або обидва. The      Термін "уніфікований локатор ресурсів" (URL) відноситься до підмножини URI      що, крім виявлення ресурсу, надають засоби      розміщення ресурсу, описуючи його основний механізм доступу      (наприклад, "місцеположення" мережі). Термін "уніфіковане ім'я ресурсу"      (URN) історично використовується для позначення обох URI під      схема "Урна" [RFC2141], яка повинна залишатись глобальною унікальною      і наполегливі навіть тоді, коли ресурс перестає існувати або стає      недоступний, та будь-якому іншому URI з властивостями імені.

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

РЕДАГУВАТИ: Я думав раніше, що всі URL-адреси є дійсними URI, але за кожним коментарям:

Ні "всі URL-адреси є URI". Це залежить від тлумачення RFC. Наприклад, у Java аналізатор URI не подобається [ або ] і це тому, що специфікація говорить "не треба", а не "не повинна".

Так що, на жаль, вода поглинає ще більше.

Якщо ви ще не читали Відповідь Роджера Пата, Я б порадив це зробити також.


1516
2017-10-06 21:29



Тільки URI з урною: схема є URN. URI може бути класичною URL-адресою, URN або просто URI, який не починається з "urn:" і не посилається на розташування ресурсу. - Mark Cidade
Зверніть увагу, що RFC 2396 був застарілим завдяки RFC 3986 давно (але це не змінює фактів ...) - Julian Reschke
Ні "всі URL-адреси є URI".Це залежить від інтерпретації RFC. Наприклад, в Java аналізатор URI не подобається [ або ] і це тому, що специфікація говорить "не треба", а не "не повинна". - Adam Gent
@AdamGent: RFC 3986 1.1.3: "URI ще можна класифікувати як локатор, ім'я або обидва". Отже, якщо URL - це особливий тип URI, це означає, що кожна URL - адреса URI. Чи не так? - Hubert
@AdamGent: Це звучить як приваблива реалізація Java, а не нормативна. The java.net.URI док сама каже: "кожен URL є URI, абстрактно кажучи, але не кожен URI - це URL-адреса". І java.net.URL робить дивовижні речі, як перевіряти рівність URL-адрес, вирішуючи імена хостів на IP-адреси (що, здається, суперечить RFC 3986 сек 6, перш за все, і порушує віртуальні хости w). Я думаю, що це просто означає, що стандартна бібліотека Java має деяку суперечливу поведінку класу. - Andrew Janke


URIідентифікувати і URL-адресаs locate; однак Локатори також є ідентифікаторами, тому кожна URL-адреса також є URI, але Є URI, які не є URL-адресами.

Приклади

  • Роджер Пат

Це моє ім'я, це ідентифікатор. Це схоже на URI, але не може бути URL-адресою, оскільки воно нічого не говорить про моє місцезнаходження чи способи зв'язатися зі мною. У цьому випадку також відбувається виявлення щонайменше 5 інших людей в США.

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

Це локатор, який є ідентифікатором для цього фізичного розташування. Це як URL-адреса та URI (оскільки всі URL-адреси є URI), а також ідентифікує мене опосередковано як "житель ..". У цьому випадку це унікально ідентифікує мене, але це зміниться, якщо я отримаю кімнату сусіда.

Я кажу "як", тому що ці приклади не відповідають необхідному синтаксису.

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

Від Вікіпедія:

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

Через цю загальну плутанину багато продуктів та документації неправильно використовують один термін, а не інший, призначають власне розрізнення або використовують їх як синоніми.

УРН

Моє ім'я, Роджер Пат, може бути як УРН (Uniform Resource Name), крім тих, що є набагато більш регульований і призначений бути унікальним по всьому світу обидва простір і час.

Оскільки в даний час я поділяю це ім'я з іншими людьми, він не є унікальним у усьому світі і не підходить як URN. Однак, навіть якщо жодна інша родина не використовувала це ім'я, я названий на честь мого батьківського дідуся, тому він все одно не буде унікальним за часом. І навіть якщо це це не було, можливість називати моїх нащадків після мене зробити це непридатним як URN.

URN відрізняються від URL-адрес у цьому жорсткому обмеженні унікальності, навіть якщо вони обидва поділяють синтаксис URI.


3524
2017-12-31 06:32



URNs are different from URLs in this rigid uniqueness constraint Чи означає це, що URL-адреси не однозначно ідентифікують місцеположення? - eugene
Відповідь Роджера дає хорошу прагматичну пораду. За офіційну відповідь я йду до W3C, який опублікував "URI, URL-адреси та URN: роз'яснення та рекомендації"в 2001 році. У двох словах, W3C вважає, що сучасна точка зору полягає в тому, що все є URI. URL є неформальним поняттям, а не формальним поняттям. І плутанина датується" класичним видом ", який намагався жорстко розрізняти категорії URI (з якої URL-адреси була одна категорія). - netjeff
.. Уніфікований Локатор Ресурсів (URL) .. вказує, де доступний ідентифікований ресурс і механізм його вилучення. Тобто, іншими словами, немає такої речі, як "відносна" URL-адреса? - Arne
Чи є "earth128: Edward-de-Leau / 6000000000569063853" (унікальний для кількох мультивелерів) URN, URL-адреса чи URI? - edelwater
@edelwater: Я думаю, що це uri, оскільки це лише вас ототожнює, але нічого не говорить про те, як дістатися до вас, якщо ви не означаєте, що earth128 - це середовище міжпланетних поїздок :) - user20358


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-адреси можуть мати параметри запиту та ідентифікатори фрагментів.

УРН - Uniform Resource Name

Визначає ресурс унікальним і наполегливим ім'ям, але не обов'язково говорить вам, як знайти його в Інтернеті. Зазвичай починається з префікса urn:  Наприклад:

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

УРН можуть ідентифікувати ідеї та концепції. Вони не обмежуються ідентифікацією документів. Якщо URN представляє документ, його можна перетворити на "resolver" у 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 що наразі OK, щоб використовувати терміни URL та URI взаємозамінно (для позначення URI). Більше неможливо чітко сегментувати URI у різних типах, таких як URL, URN та URC.

Чи може URI бути як URL-адресою, так і URN?

Визначення УРН тепер є більш суттєвим, ніж те, що було зазначено вище. The останній RFC на URI каже, що будь-який URI тепер може бути URN (незалежно від того, починається він з urn:), поки він має "властивості імені". Тобто: він глобально унікальний і наполегливий навіть тоді, коли ресурс перестає існувати або стає недоступним. Приклад: URIs, які використовуються у типах doc типу HTML, таких як http://www.w3.org/TR/html4/strict.dtd. Цей URI буде продовжувати називати перехідний тип HTML4, навіть якщо сторінка на веб-сайті w3.org була вилучена.


URI/URL Venn Diagram


476
2018-03-04 21:51



є "C: \ myfile" URI, URL або URN? або ніхто з них. - bvdb
Шлях до файлу - це не URL-адреса або URI, якщо ви не встановите file:// префікс на ньому Хоча веб-переглядачі, як правило, обробляють шляхи файлів, відформатованих за форматом URL-адреси. Mozilla публікує свої тестові випадки для файлів URL-адрес. - Stephen Ostermiller
Чому вони "одноманітні"? - hkBattousai
Побачити розділ 1.1 RFC - "Однорідність передбачає декілька переваг.Це дозволяє використовувати різні типи ідентифікаторів ресурсів у тому ж контексті, навіть якщо механізми, що використовуються для доступу до цих ресурсів, можуть відрізнятися.Це дозволяє одноманітну семантичну інтерпретацію загальних синтаксичних умов у різних типах ідентифікаторів ресурсів ... " - Stephen Ostermiller
Ця відповідь набагато легше зрозуміти. Я бачу чіткі зображення реального прикладу URL-адрес і URN. І для когось, читати більше про це ... danielmiessler.com/study/url-uri - vee


Підсумок: ідентифікує URI, URL-адреса ідентифікує та знаходить.

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

Ви можете визначити текст як urn:isbn:0-486-27557-4.
Це буде URI, але більш точно a УРН* бо це іменує текст.

Ви також можете визначити текст як file://hostname/sharename/RomeoAndJuliet.pdf.
Це також буде URI, а конкретніше - a URL-адреса бо це знаходить текст.

* Уніфіковане ім'я ресурсу

(Зауважте, що мій приклад адаптується з Вікіпедія)


233
2017-12-31 06:51



Корисно відзначити фактичний URN (щоб побачити, як він порівнюється з URL-адресою): urn: isbn: 0-486-27557-4 - Michael Brewer-Davis
@ Майкл - Це моє розуміння ISBN 0486275574 також називає текст і, таким чином, кваліфікується як URN. Я вибираю формат, який я вважав би більш знайомим читачам. - Greg
Так чи варто було б сказати, що хеш (наприклад, SHA1) файлу може бути URN для цього файлу? - johnsimer
@johnsimer Не думайте, так як ви можете мати копію одного файлу на тому ж комп'ютері, що призведе до того ж хешу, і тому це не єдина. - Dennis98


Це деякі дуже добре написані, але довгострокові відповіді. Ось різниця що стосується CodeIgniter:

URL-адреса - http://example.com/some/page.html

URI - /some/page.html

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

URI є ресурсом у поточному домені, тому йому потрібно менше інформації, яку можна знайти.

У кожному прикладі, що CodeIgniter використовує слово URL або URI, це різниця, про яку вони говорять, хоча в грандіозній схемі Інтернету це не є правильним.


125
2017-12-31 08:58



Ця відповідь може бути надто спрощена, але розглянути контекст його питання. Він буде більш корисним для нього, що вафлінг про простір імен XML! - Phil Sturgeon
Ця відповідь не тільки неправильна, але й активно вводить в оману. Обидва Приклади - URL-адреси. І оскільки кожен URL-адреса також є URI, це означає, що обидва Приклади є URI. З метою демонстрації різниці між URI та URL-адресами це абсолютно марно. - Jörg W Mittag
Це різниця в тому, що стосується CodeIgniter. У кожному випадку вони використовують слово URL або URI, це різниця, про яку вони говорять. Тому в грандіозній схемі Інтернету це не є правильним, але в обсязі питання ОП (різниця в CodeIgniter), ця відповідь є абсолютно правильною. - Phil Sturgeon
Це неправильно. @ JörgWMittag - головним чином. URL-адреси є URI, і вони "повністю кваліфіковані"; тому "URL" у цьому відповіді є обидва. Але /some/page.html це не URI. Це "relative-ref", що є свого роду "URI-reference". У поєднанні з контекстом базового URI його можна вирішити за допомогою URI, але сам URI не є. Побачити Розділ 4.1 RFC 3986. CodeIgniter, ймовірно, використовує терміни неправильні, і це слід викликати; Q (як зараз редагується) не обрамлений як CodeIgniter-специфічний. - Andrew Janke
Для майбутніх людей, котрі читають ці коментарі, і якимись заплутаними: ця відповідь не була опублікована для цього питання. Це питання ніколи не мав нічого спільного з CodeIgniter. З'явився дубльований запит, який конкретно згадав CodeIgniter, який був закритий, і всі його відповіді мігрували на це питання. Ця відповідь була однією з тих, що були перенесені зі старого закритого питання на це захищене питання. Навіть так, я ця відповідь вводить в оману. Я зрівняв це - інші повинні робити те ж саме, оскільки в його новому будинку це неправильно. Автор повинен видалити його або об'єднання буде скасовано. - ArtOfWarfare


Невелике доповнення до вже відібраних відповідей, ось діаграма Венна, яка підсумовує теорію (від красивої Пратеек Джоші пояснення):

enter image description here

І приклад (також з сайту Prateek):

enter image description here


64
2017-10-16 17:46



Я вважаю, що друга ілюстрація невірна. За специфікацією url.spec.whatwg.org/#url-writing  URL-адреса повинна бути записана як відносна URL-адреса або абсолютна URL-адреса, за бажанням слідує "#" і фрагмент. Так, #posts Ідентифікатор фрагмента може бути частиною URL-адреси - ruvim
Це просто неправильно - Engineer Dollery
Дві ілюстрації суперечать один одному. - patapouf_ai


Це одна з найбільш заплутаних і, можливо, невідповідних тем, з якими я зіткнувся як веб-професіонал.

Наскільки я це розумію, URI - це опис щось, що відповідає прийнятому формату, який може визначати як унікальне ім'я (ідентифікатор), так і його місце розташування.

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

Мені здається, що URN-адреси схожі на GUID. Вони просто стандартизована методологія надання унікальних назв для речей. Як і в деклараційному просторі імен, що використовує назву компанії - це не схоже, що ресурс, що сидить на сервері, десь відповідає цьому рядку тексту, - це просто унікально щось ідентифікує.

Я також намагаюся повністю уникати терміну URI та обговорювати речі лише з точки зору URL-адреси чи URN, оскільки це призводить до такого ступеню непорозумінь. Питання, яке ми маємо насправді спробувати відповісти людям, - це не стільки семантика, скільки визначення того, коли виникають проблеми, незалежно від того, чи існує будь-яка практична різниця в них, що змінить підхід до ситуації програмування. Наприклад, якщо хтось виправляє мене в бесіді і каже: "О, це не URL-адреса, це URI". Я знаю, що він повний. Якщо хтось каже: "ми використовуємо URN для визначення ресурсу", я, швидше за все, розумію, що ми присвячуємо його унікальній назві, а не знаходимо його на сервері.

Якщо я покидаю базу - будь ласка, дайте мені знати!


52
2017-12-01 13:07



Ні, я думаю, ти правий. Семантика URI проти URL-адреси проти URL-адреси, аніж URI-ref і т. Д. Є марною для більшості розробників, лише тому, що це приводить до безглуздих (непродуктивних, незначущих для прийняття рішень) дебатів. Якщо використовується Google API redirect_urlзамість redirect_uri, чи хтось справді дбатиме? - Alexander Pritchard


Перш за все змусити ваш розум плутанини і прийняти його простим і зрозуміти.

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 (Uniform Resource Name) => / folder / page.html

URI => (URL + URN) або лише URL-адреса або тільки URN


44
2017-07-21 17:50



хороша, коротка, зрозуміла та чітка відповідь !!! - Björn Hallström


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

URL-адреси є підмножиною URI (які також містять URN).

В основному, URI є загальним ідентифікатором, де URL-адреса визначає місцеположення, а URN - ім'я.


42
2017-10-06 21:30



URL-адреси не є справжнім підмножиною URI. Ви можете зробити лише URL-адресу з символами [ і ] але не URI. - Adam Gent
Квадратні дужки недійсні в URI або URL-адресах. Дивіться це питання, яке містить багато посилань на специфікації: У URL-адресах дозволено використовувати квадратні дужки?. Коли в квадратні дужки з'являються або вони, вони повинні бути закодовані. - Stephen Ostermiller