Pytanie Jaka jest różnica między URI, URL i URN?


Ludzie mówią URLs, URIs i URNAwyglądają tak, jakby były różnymi rzeczami, ale wyglądają tak samo gołym okiem.

Jakie są rozróżnialne różnice między nimi?


3710
2017-10-06 21:26


pochodzenie


URL jest bardziej szczegółowy niż URI. - mk12
Tora, na które webmasterzy przyjmują to pytanie: Czym jest różnica między identyfikatorem URI a adresem URL - hippietrail
Schemat Mini Venna: ( URIs ( URLs ) ) - icc97
Wciąż istnieje wiele wątpliwości dotyczących adresu URI w porównaniu z adresem URL, nawet tych, którzy próbowali odpowiedzieć na to pytanie. Każdy może zobaczyć praktyczne przykłady adresów URL, które nie są identyfikatorami URI, przykłady identyfikatorów URI, które nie są adresami URL, oraz przykłady adresów URL i Identyfikatory URI. - Dennis
Kathy: "Czy to twój pies?" Bob: "Byłoby bardziej poprawne nazywanie go kiem." Kathy: "Nie, on jest psem, ty, panie, jesteś pedantem". - Yojimbo


Odpowiedzi:


Od RFC 3986:

Identyfikator URI może być dalej klasyfikowany jako lokalizator, nazwa lub oba. The      termin "Uniform Resource Locator" (URL) odnosi się do podzbioru identyfikatorów URI      że oprócz identyfikacji zasobu, należy zapewnić środki      lokalizowanie zasobu przez opisanie jego podstawowego mechanizmu dostępu      (np. jego "lokalizacja" w sieci). Termin "Jednolita nazwa zasobu"      (URN) było używane historycznie w odniesieniu do obu URI w ramach      schemat "urn" [RFC2141], które muszą pozostać globalnie wyjątkowe      i trwałe nawet wtedy, gdy zasób przestaje istnieć lub staje się      niedostępny i do dowolnego innego URI z właściwościami nazwy.

Tak więc wszystkie adresy URL są identyfikatorami URI (w rzeczywistości niezupełnie - patrz poniżej), a wszystkie URN to URI - ale URN i adresy URL są różne, więc nie można powiedzieć, że wszystkie URI są adresami URL.

EDYCJA: wcześniej sądziłem, że wszystkie adresy URL są poprawnymi identyfikatorami URI, ale jak na komentarze:

Nie "wszystkie adresy URL to identyfikatory URI". To zależy od interpretacji RFC. Na przykład w Javie parser URI nie lubi [ lub ] a to dlatego, że specyfikacja mówi "nie powinien", a nie "nie powinien".

Tak więc, niestety, to jeszcze bardziej mąci wody.

Jeśli jeszcze nie czytałeś Odpowiedź Rogera Pate'a, Radziłbym też to zrobić.


1516
2017-10-06 21:29



Tylko URI z urn: scheme to URN. Identyfikator URI może być klasycznym adresem URL, URN lub tylko identyfikatorem URI, który nie zaczyna się od "urn:" i nie odnosi się do lokalizacji zasobu. - Mark Cidade
Zauważ, że RFC 2396 został przestarzały przez RFC 3986 dawno temu (ale to nie zmienia faktów ...) - Julian Reschke
Nie "wszystkie adresy URL są identyfikatorami URI"To zależy od interpretacji RFC, na przykład w Javie parser URI nie lubi [ lub ] a to dlatego, że specyfikacja mówi "nie powinien", a nie "nie powinien". - Adam Gent
@AdamGent: RFC 3986 1.1.3: "URI może być dalej klasyfikowany jako lokalizator, nazwa lub oba." Tak więc, jeśli URL jest szczególnym rodzajem URI, oznacza to, że każdy adres URL jest identyfikatorem URI. Czyż nie? - Hubert
@AdamGent: To brzmi jak dziwactwo wdrożenia Java, a nie normatywne. The java.net.URI doc sama mówi "każdy URL jest URI, mówiąc abstrakcyjnie, ale nie każdy URI jest adresem URL". I java.net.URL robi dziwne rzeczy, takie jak sprawdzanie równości adresów URL poprzez rozdzielanie nazw hostów na adresy IP (co wydaje się być sprzeczne z RFC 3986 s 6 w pierwszej kolejności, i łamie w wirtualnych hostach). Myślę, że to po prostu oznacza, że ​​Java Standard Library ma pewne niespójne zachowanie klasy. - Andrew Janke


URIs zidentyfikować i URLzlokalizuj; jednak, lokalizatory to także identyfikatory, więc każdy adres URL jest również identyfikatorem URI, ale istnieją identyfikatory URI, które nie są adresami URL.

Przykłady

  • Roger Pate

To jest moje imię, które jest identyfikatorem. Jest jak identyfikator URI, ale nie może być adresem URL, ponieważ nie zawiera informacji o mojej lokalizacji ani o tym, jak się ze mną skontaktować. W tym przypadku zdarza się także, że identyfikuje się co najmniej 5 innych osób w samych Stanach Zjednoczonych.

  • 4914 West Bay Street, Nassau, Bahamy

Jest to lokalizator, który jest identyfikatorem tej fizycznej lokalizacji. Jest to jak adres URL i URI (ponieważ wszystkie adresy URL to URI), a także identyfikuje mnie pośrednio jako "mieszkaniec ...". W tym przypadku jednoznacznie identyfikuje mnie, ale to się zmieni, jeśli dostanę współlokatora.

Mówię "jak", ponieważ te przykłady nie spełniają wymaganej składni.

Popularne zamieszanie

Od Wikipedia:

W przypadku komputerów jednolity lokalizator zasobów (URL) jest podzbiorem jednolitego identyfikatora zasobów (URI), który określa miejsce, w którym dostępny jest zidentyfikowany zasób i mechanizm jego pobierania. W powszechnym użyciu iw wielu dokumentach technicznych oraz werbalnych dyskusjach często jest niewłaściwie używany jako synonim URI, ... [podkreśl moje]

Z powodu powszechnego zamieszania wiele produktów i dokumentacji nieprawidłowo używa jednego terminu zamiast drugiego, przypisuje własne rozróżnienie lub używa ich synonimicznie.

URNs

Moje nazwisko, Roger Pate, może być jak URNA (Jednolita nazwa zasobu), z wyjątkiem tych znacznie bardziej uregulowane i ma być unikalny w całym obie przestrzeń i czas.

Ponieważ obecnie udostępniam to nazwisko innym osobom, nie jest ono globalnie unikalne i nie byłoby odpowiednie jako URN. Jednakże, nawet jeśli żadna inna rodzina nie używa tego imienia, jestem nazwana na cześć mojego dziadka ze strony ojca, więc nadal nie byłaby unikalna w czasie. A nawet jeśli że tak nie było, możliwość nazwania moich potomków po mnie czyni to nieodpowiednim jako URN.

URN różnią się od adresów URL w tym sztywnym ograniczeniu unikalności, mimo że oba mają wspólną składnię URI.


3524
2017-12-31 06:32



URNs are different from URLs in this rigid uniqueness constraint Czy to oznacza, że ​​adresy URL nie identyfikują jednoznacznie lokalizacji? - eugene
Odpowiedź Rogera dostarcza dobrych pragmatycznych porad. Na oficjalną odpowiedź podchodzę do W3C, który opublikował "Identyfikatory URI, adresy URL i URN: Wyjaśnienia i zalecenia"W 2001. W skrócie, W3C mówi, że współczesny pogląd jest taki, że wszystko jest URI, URL jest nieformalną koncepcją, a nie formalną koncepcją, a zamieszanie sięga" klasycznego poglądu ", który próbował sztywno rozróżnić kategorie URI (którego URL był jedną kategorią). - netjeff
..a Uniform Resource Locator (URL) .. określa, gdzie zidentyfikowany zasób jest dostępny i mechanizm jego odzyskiwania. Innymi słowy, nie ma czegoś takiego jak "względny" URL? - Arne
Czy "earth128: Edward-de-Leau / 6000000000569063853" (unikalny ja przez wiele wieloświatów) jest URN, URL lub URI? - edelwater
@edelwater: Przypuszczam, że to jest uri, ponieważ identyfikuje tylko ciebie, ale nie mówi nic o tym, jak do ciebie dotrzeć, chyba że masz na myśli, że Ziemia128 jest jakimś medium międzyplanetarnej podróży :) - user20358


URI - Jednolity identyfikator zasobu

Identyfikatory URI są standardem do identyfikowania dokumentów za pomocą krótkiego ciągu cyfr, liter i symboli. Są one zdefiniowane przez RFC 3986 - Uniform Resource Identifier (URI): Ogólna składnia. Adresy URL, URN i URC są wszystkie typy URI.

URL - Jednolity lokalizator zasobów

Zawiera informacje o tym, jak pobrać zasób z jego lokalizacji. Na przykład:

  • 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 (Względny adres URL, przydatny tylko w kontekście innego adresu URL)

Adresy URL zawsze zaczynają się od protokołu (http) i zwykle zawierają informacje, takie jak nazwa hosta sieciowego (example.com) i często ścieżka do dokumentów (/foo/mypage.html). Adresy URL mogą mieć parametry zapytania i identyfikatory fragmentów.

URN - Jednolita nazwa zasobu

Identyfikuje zasób według unikalnej i trwałej nazwy, ale niekoniecznie mówi, jak go zlokalizować w Internecie. Zwykle zaczyna się od prefiksu urn:  Na przykład:

  • urn:isbn:0451450523 aby zidentyfikować książkę według numeru ISBN.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 unikalny globalnie identyfikator
  • urn:publishing:book - Przestrzeń nazw XML, która identyfikuje dokument jako typ książki.

URN mogą identyfikować pomysły i koncepcje. Nie są ograniczone do identyfikacji dokumentów. Gdy URN nie reprezentuje dokumentu, może zostać przetłumaczone na URL przez "resolver". Dokument można następnie pobrać z adresu URL.

URC - Uniform Resource Citation

Zwraca uwagę na metadane dotyczące dokumentu, a nie samego dokumentu. Przykładem URC jest taki, który wskazuje na kod źródłowy HTML strony takiej jak: view-source:http://example.com/

Data URI

Zamiast lokalizować je w Internecie lub nazywać, dane można umieścić bezpośrednio w URI. Przykładem może być data:,Hello%20World.


Często Zadawane Pytania

Słyszałem, że nie powinienem już podawać adresu URL, dlaczego?

Specyfikacja W3 dla HTML mówi, że href znacznika kotwicy może zawierać identyfikator URI, a nie tylko URL. Powinieneś być w stanie wprowadzić URN, taki jak <a href="urn:isbn:0451450523">. Twoja przeglądarka może następnie rozwiązać ten URN pod adresem URL i pobrać książkę za Ciebie.

Czy wszystkie przeglądarki rzeczywiście wiedzą, jak pobierać dokumenty według URN?

Nie wiem, ale nowoczesna przeglądarka implementuje schemat URI danych.

Czy różnica między adresem URL a identyfikatorem URI ma związek z tym, czy jest względny, czy bezwzględny?

Nie. Zarówno względne, jak i bezwzględne adresy URL to adresy URL (i identyfikatory URI).

Czy różnica między adresem URL a identyfikatorem URI ma coś wspólnego z tym, czy ma parametry zapytania?

Nie. Oba adresy URL z parametrami zapytań i bez nich to adresy URL (i identyfikatory URI).

Czy różnica między adresem URL a identyfikatorem URI ma związek z tym, czy ma on identyfikator fragmentu?

Nie. Oba adresy URL zi bez identyfikatorów fragmentów to adresy URL (i identyfikatory URI).

Czy różnica między adresem URL a identyfikatorem URI ma coś wspólnego z tym, jakie znaki są dozwolone?

Nie. Adresy URL są zdefiniowane jako ścisły podzbiór identyfikatorów URI. Jeśli analizator składni dopuszcza znak w adresie URL, ale nie w identyfikatorze URI, występuje błąd w analizatorze składni. Specyfikacja szczegółowo określa, które znaki są dozwolone w jakich częściach adresów URL i URI. Niektóre znaki mogą być dozwolone tylko w niektórych częściach adresu URL, ale same znaki nie stanowią różnicy między adresami URL a identyfikatorami URI.

Ale czy W3C nie mówi teraz, że adresy URL i URI to to samo?

Tak. W3C zdał sobie sprawę, że jest w tym sporo zamieszania. Wydali a Dokument wyjaśniający URI mówi, że teraz jest w porządku używać terminów URL i URI zamiennie (w znaczeniu URI). Nie jest już przydatne ścisłe segmentowanie identyfikatorów URI w różnych typach, takich jak URL, URN i URC.

Czy identyfikator URI może być adresem URL i URN?

Definicja URN jest teraz luźniejsza niż to, o czym pisałem powyżej. The najnowsze RFC w URI mówi, że dowolny URI może teraz być URN (niezależnie od tego, czy zaczyna się od urn:), o ile ma "właściwości nazwy". To znaczy: jest globalnie wyjątkowy i trwały nawet wtedy, gdy zasób przestaje istnieć lub staje się niedostępny. Przykład: identyfikatory URI używane w dokumentach HTML, takich jak http://www.w3.org/TR/html4/strict.dtd. Ten identyfikator URI nadal będzie wskazywał tymczasowy dokument w formacie HTML4, nawet jeśli strona w witrynie w3.org została usunięta.


URI/URL Venn Diagram


476
2018-03-04 21:51



czy "C: \ myfile" to URI, URL lub URN? lub żaden z nich. - bvdb
Ścieżka do pliku nie jest adresem URL ani identyfikatorem URI, chyba że umieścisz plik file:// prefiks na tym. Chociaż przeglądarki zazwyczaj obsługują ścieżki plików w formacie innym niż URL. Mozilla publikuje swoje przypadki testowe dla adresów URL plików. - Stephen Ostermiller
Dlaczego są "jednolite"? - hkBattousai
Widzieć sekcja 1.1 specyfikacji RFC - "Jednorodność ma wiele zalet: pozwala na używanie różnych typów identyfikatorów zasobów w tym samym kontekście, nawet jeśli mechanizmy używane do uzyskania dostępu do tych zasobów mogą się różnić." Pozwala to na jednolitą interpretację semantyczną wspólnych konwencji składniowych dla różnych typów identyfikatorów zasobów ... " - Stephen Ostermiller
Ta odpowiedź jest o wiele łatwiejsza do zrozumienia. Widzę wyraźne zdjęcia rzeczywistego przykładu adresów URL i URN. I aby każdy mógł przeczytać więcej na ten temat ... danielmiessler.com/study/url-uri - vee


W podsumowaniu: identyfikator URI identyfikuje, URL identyfikuje i lokalizuje.

Rozważ konkretne wydanie sztuki Szekspira Romeo i Julia, z których masz cyfrową kopię w sieci domowej.

Możesz zidentyfikować tekst jako urn:isbn:0-486-27557-4.
To byłby URI, ale bardziej konkretnie URNA* ponieważ to nadaje nazwę tekstowi.

Możesz również zidentyfikować tekst jako file://hostname/sharename/RomeoAndJuliet.pdf.
Byłby to również URI, ale w szczególności URL ponieważ to lokalizuje tekst.

* Jednolita nazwa zasobu

(Zauważ, że mój przykład został zaadaptowany z Wikipedia)


233
2017-12-31 06:51



Warto zwrócić uwagę na rzeczywisty URN (aby zobaczyć, jak to się ma do adresu URL): urn: isbn: 0-486-27557-4 - Michael Brewer-Davis
@Michael - Rozumiem, że tak ISBN 0486275574 również określa tekst i tym samym kwalifikuje się jako URN. Wybieram format, który według mnie byłby bardziej znany czytelnikom. - Greg
Czy miałoby sensu powiedzieć, że skrót (np. SHA1) pliku może być URN dla tego pliku? - johnsimer
@johnsimer Nie sądzisz, że mógłbyś mieć kopię jednego pliku na tym samym komputerze, co skutkowałoby tym samym hashem i dlatego nie jest unikalne. - Dennis98


Są to bardzo dobrze napisane, ale długotrwałe odpowiedzi. Oto różnica w odniesieniu do CodeIgniter:

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

URI - /some/page.html

Mówiąc prościej, URL to pełna metoda identyfikacji dowolnego zasobu w dowolnym miejscu i może mieć różne protokoły, takie jak FTP, HTTP, SCP itp.

Identyfikator URI jest zasobem w bieżącej domenie, więc potrzebuje mniej informacji.

W każdym przypadku, gdy CodeIgniter używa słowa URL lub URI, jest to różnica, o której mówią, chociaż w wielkim schemacie sieci nie jest ona w 100% poprawna.


125
2017-12-31 08:58



Ta odpowiedź może być nadmiernie uproszczona, ale spójrz na kontekst jego pytania. To będzie dla niego bardziej pomocne, jeśli chodzi o przestrzenie nazw XML! - Phil Sturgeon
Ta odpowiedź jest nie tylko błędna, ale też aktywnie wprowadzająca w błąd. Obie przykłady to adresy URL. A ponieważ każdy adres URL jest również identyfikatorem URI, oznacza to obie przykłady to URI. W celu wykazania różnicy między identyfikatorami URI i adresami URL jest to całkowicie bezużyteczne. - Jörg W Mittag
Taka jest różnica w stosunku do CodeIgniter. W każdym przypadku używają słowa URL lub URI, o czym mówią. Dlatego w wielkim schemacie sieci nie jest on w 100% poprawny, ale w zakresie pytania OP (różnica w CodeIgniter) ta odpowiedź jest całkowicie poprawna. - Phil Sturgeon
To jest źle. @ JörgWMittag jest głównie na punkcie. Adresy URL są identyfikatorami URI i są "w pełni kwalifikowane"; więc "URL" w tej odpowiedzi jest zarówno. Ale /some/page.html nie jest identyfikatorem URI. Jest to "względny ref", który jest rodzajem "referencji URI". W połączeniu z podstawowym kontekstem URI może być rozpoznany jako URI, ale sam nie jest identyfikatorem URI. Widzieć Sekcja 4.1 dokumentu RFC 3986. CodeIgniter prawdopodobnie używa błędnych terminów, które powinny zostać wywołane; Q (obecnie edytowane) nie jest określone jako specyficzne dla CodeIgniter. - Andrew Janke
Dla przyszłych ludzi, którzy czytają te komentarze i są tak zdezorientowani jak ja: Ta odpowiedź nie została opublikowana na to pytanie. To pytanie nigdy nie miało nic wspólnego z CodeIgniter. Pojawiło się zduplikowane pytanie, które wyraźnie wspomniało CodeIgniter, który został zamknięty i wszystkie jego odpowiedzi zostały przeniesione na to pytanie. Ta odpowiedź była jedną z tych, które zostały przeniesione ze starego zamkniętego pytania do tego chronionego pytania. Mimo to, ta odpowiedź jest myląca. Zignorowałem to - inni powinni robić to samo, ponieważ w nowym domu jest źle. Autor powinien je usunąć lub scalić. - ArtOfWarfare


Niewielki dodatek do już opublikowanych odpowiedzi, oto diagram Venna podsumowujący teorię (z pięknego Prateka Joshi wyjaśnienie):

enter image description here

I przykład (również ze strony Prateka):

enter image description here


64
2017-10-16 17:46



Uważam, że druga ilustracja jest niepoprawna. Według specyfikacji url.spec.whatwg.org/#url-writing  Adres URL musi być zapisany jako względny adres URL lub bezwzględny adres URL, opcjonalnie poprzedzony przez "#" i fragment. Więc, #posts identyfikator fragmentu może być częścią adresu URL - ruvim
To jest po prostu złe - Engineer Dollery
Te dwie ilustracje przeczą sobie wzajemnie. - patapouf_ai


Jest to jeden z najbardziej zagmatwanych i prawdopodobnie nieistotnych tematów, które spotkałem jako profesjonalnego webmastera.

Jak rozumiem, URI to opis czegoś, zgodnie z przyjętym formatem, który może definiować jednoznacznie nazwę (identyfikację) czegoś i jego lokalizację.

Istnieją dwa podstawowe podzbiory - adresy URL, które definiują lokalizację (w szczególności przeglądarkę próbującą wyszukać stronę internetową) i URN, które definiują unikalną nazwę czegoś.

Mam wrażenie, że URN są podobne do identyfikatorów GUID. Są po prostu standardową metodologią dostarczania unikalnych nazw rzeczy. Podobnie jak w deklaracji nazwy obszaru, która używa nazwy firmy - nie jest tak, że zasób znajduje się na serwerze gdzieś w korespondencji z tą linią tekstu - po prostu jednoznacznie identyfikuje coś.

Mam również tendencję do całkowitego unikania terminu URI i dyskutowania o sprawach tylko pod kątem URL lub URN, ponieważ powoduje to tyle zamieszania. Pytanie, na które powinniśmy naprawdę próbować odpowiadać ludziom, to nie tyle semantyka, ale jak zidentyfikować, kiedy napotykamy terminy, czy istnieje w nich jakakolwiek praktyczna różnica, która zmieni podejście do sytuacji programowej. Na przykład, jeśli ktoś poprawi mnie w rozmowie i powie: "och, to nie jest URL, to jest URI" Wiem, że jest ich pełno. Jeśli ktoś mówi: "używamy URN do zdefiniowania zasobu". Bardziej prawdopodobne jest, że rozumiem, że wymieniamy je wyłącznie w unikalny sposób, nie lokalizując go na serwerze.

Jeśli jestem daleko poza bazą - daj mi znać!


52
2017-12-01 13:07



Nie, myślę, że masz rację. Semantyka URI vs URL vs URL kontra URI-ref itp. Są bezużyteczne dla większości programistów, tylko dlatego, że prowadzą debatę bezcelową (nieproduktywną, nieistotną w podejmowaniu decyzji). Jeśli korzystasz z Google API redirect_urlzamiast redirect_uriCzy ktokolwiek by się tym przejmował? - Alexander Pritchard


Przede wszystkim pozbądź się umysłu i spróbuj zrozumieć, a zrozumiesz.

URI => Uniform Resource Identifier Identyfikuje pełny adres lokalizacji zasobu i-e, nazwy lub obu.

URL => Uniform Resource Locator Identyfikuje lokalizację zasobu.

URN => Jednolita nazwa zasobu Identyfikuje nazwę zasobu

Przykład

Mamy adres https://www.google.com/folder/page.html gdzie,

URI (Uniform Resource Identifier) ​​=> https://www.google.com/folder/page.html

URL (Uniform Resource Locator) => https://www.google.com/

URN (Uniform Resource Name) => /folder/page.html

URI => (URL + URN) lub tylko URL lub tylko URN


44
2017-07-21 17:50



dobra, krótka, zrozumiała i jasna odpowiedź !!! - Björn Hallström


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

Adresy URL są podzbiorem URI (które zawierają również URN).

Zasadniczo identyfikator URI jest ogólnym identyfikatorem, w którym adres URL określa lokalizację, a URN określa nazwę.


42
2017-10-06 21:30



Adresy URL nie są prawdziwym podzbiorem URI. Możesz zrobić vaid URL za pomocą znaków [ i ] ale nie URI. - Adam Gent
Nawiasy kwadratowe nie są poprawne ani dla identyfikatorów URI, ani adresów URL. Zobacz to pytanie, które ma wiele odniesień do specyfikacji: Czy w adresach URL dozwolone są nawiasy kwadratowe?. Gdy pojawiają się nawiasy kwadratowe, powinny być zakodowane. - Stephen Ostermiller