Jaka jest różnica między identyfikatorem URI a adresem URL?

44

Przeczytałem te strony:

Znam podstawy URL, URN i URI; ale niewiele na temat różnic . Rzecz, której nie rozumiem, to taka strona: http://www.bernzilla.com/item.php?id=100która część to URL, URN i URI!
URI jest w całości częścią, ale URL i URN?

Zdjęcie z wikipedii

Edycja:
z w3c.org:

Adres URL jest rodzajem identyfikatora URI, który identyfikuje zasób poprzez przedstawienie jego podstawowego mechanizmu dostępu (np. Jego „lokalizacji” w sieci), a nie za pomocą niektórych innych atrybutów, które może mieć.

z www.damnhandy.com :

Użycie adresu URL przy opisywaniu aplikacji jest teraz uważane za nieprawidłowe.

Teraz jest idatrybut? Co z częścią aplikacji? Czy PHP jest aplikacją?

nie zrobiony
źródło
3
To pytanie zostało zadane kilka razy w przepełnieniu stosu i zyskało sporo uwagi i dobrych odpowiedzi: Jaka jest różnica między identyfikatorem URI a adresem URL?
hippietrail

Odpowiedzi:

42

Diagram Venna URI / URL

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:[email protected]
  • 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 dokumentu ( /foo/mypage.html). Adresy URL mogą mieć parametry zapytania i identyfikatory fragmentów.

URN - jednolita nazwa zasobu

Identyfikuje zasób za pomocą unikalnej i trwałej nazwy. Zwykle zaczyna się od przedrostka urn: Na przykład:

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

URN mogą identyfikować pomysły i koncepcje. Nie ograniczają się one do identyfikacji dokumentów. Gdy URN reprezentuje dokument, może zostać przetłumaczony na adres URL przez „resolver”. Dokument można następnie pobrać z adresu URL.

URI - jednolity identyfikator zasobu

Identyfikatory URI obejmują adresy URL, URN i inne sposoby identyfikowania zasobu.

Przykładem identyfikatora URI, który nie jest ani adresem URL ani URN, może być identyfikator URI danych, taki jak data:,Hello%20World. To nie jest URL ani URN, ponieważ URI zawiera dane. Nie nazywa go ani nie mówi, jak go zlokalizować w sieci.

Istnieją również jednolite cytowania zasobów (URC), które wskazują na metadane dotyczące dokumentu, a nie na sam dokument. Przykładem URC byłoby identyfikator do przeglądania kodu źródłowego strony internetowej view-source:http://example.com/. URC to inny typ identyfikatora URI, który nie jest ani adresem URL, ani URN.

Często Zadawane Pytania

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

Specyfikacja W3 dla HTML mówi, że hreftag zakotwiczenia może zawierać identyfikator URI, a nie tylko adres URL. Powinieneś być w stanie podać URN, taki jak <a href="urn:isbn:0451450523">. Twoja przeglądarka rozpozna następnie ten URN na adres URL i pobierze książkę dla Ciebie.

Czy jakieś przeglądarki rzeczywiście wiedzą, jak pobierać dokumenty przez URN?

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

Czy różnica między URL a URI ma coś wspólnego z tym, czy jest względna czy bezwzględna?

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

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

Nie. Oba adresy URL z parametrami zapytania i bez nich są adresami URL (i identyfikatorami URI).

Czy różnica między URL a URI ma coś wspólnego z tym, czy ma identyfikator fragmentu?

Nie. Oba adresy URL z identyfikatorami fragmentów i bez nich są adresami URL (i identyfikatorami URI).

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

Tak. W3C zdało sobie sprawę, że jest w tym mnóstwo zamieszania. Wydali dokument wyjaśniający URI, który mówi, że teraz można używać zamiennie terminów URL i URI (czyli URI). Nie jest już przydatne ścisłe dzielenie identyfikatorów URI na różne typy, takie jak URL, URN i URC.

Czy identyfikator URI może być zarówno adresem URL, jak i URN?

Definicja URN jest teraz luźniejsza niż to, co powiedziałem powyżej. Najnowszy RFC URI mówi, że każdy URI może teraz być URN (niezależnie od tego, czy rozpoczyna się urn:) tak długo, jak to ma „właściwości nazwy.” To znaczy: Jest globalnie wyjątkowy i trwały, nawet gdy zasób przestaje istnieć lub staje się niedostępny. Przykład: identyfikatory URI używane w typach dokumentów HTML, takich jak http://www.w3.org/TR/html4/strict.dtd. Ten identyfikator URI nadal będzie nazywać przejściowy typ HTML4, nawet jeśli strona w witrynie w3.org zostanie usunięta.

Stephen Ostermiller
źródło
To, co myli mnie w kwestii wyjaśnienia W3C i rozróżnienia adresu URL / URI, to fakt, że w rzeczywistości wiele dokumentów serwera WWW opisuje adres URL jako cały ciąg żądania, a URI jako „część zgodną z protokołem”. Odwołuje się nawet do tej części przez nazwę zmiennej $ uri. Na przykład: nginx.com/blog/creating-nginx-rewrite-rules To nie jest ściśle „poprawne” według definicji W3C? Ale myślę, że jest to najbardziej przydatne.
mike
1
Identyfikatory URI były powszechnie źle rozumiane. Wiele osób uważało, że identyfikator URI jest częścią adresu URL, podobnie jak względny adres URL lub zgodnie z protokołem. To nigdy nie było poprawne, ale pomysły te dość często trafiały do ​​dokumentacji serwera lub do programowania interfejsów API.
Stephen Ostermiller
10

Myślę, że te artykuły wyjaśniają całkiem dobrze. Aby odpowiedzieć na twoje pytanie - wszystko to jest adres URL:

http://www.bernzilla.com/item.php?id=100

Każda jego część - http: www.bernzilla.comi tak dalej, ma swoją własną nazwę:

  • http: to schemat
  • www jest subdomeną
  • bernzilla.com jest domeną
  • com to domena najwyższego poziomu lub TLD
  • (może tam być folder lub ścieżka, np. /dir/item.php, ale nie ma)
  • item.php to strona lub nazwa pliku, która ma rozszerzenie php
  • id = 100 to ciąg zapytania

Widzę, biorąc pod uwagę ten schemat z wikipedii, dlaczego jednak pytasz. Ten diagram mówi, że istnieją dwa typy identyfikatorów URI - adresy URL i URN, a rozmyty bit w środku oznacza, że ​​coś może być jednocześnie.

paulmorriss
źródło
Dziękuję za odpowiedź. Zredagowałem moje pytanie. możesz spojrzeć jeszcze raz?
cofnął
Nie rozumiem cytatu na temat opisywania aplikacji i nie widzę komentarza, w którym ktoś to zauważył. Zaktualizuję moją odpowiedź, aby opisać poszczególne części.
paulmorriss,
@paul, nie masz na myśli identyfikatora URI w pierwszym wierszu? id=100to nie lokalizacja , to wskaźnik.
DisgruntledGoat
Myślę, że miałem na myśli URL. W przypadku niektórych witryn, jeśli zmienisz identyfikator, będziesz mieć inne „strony” w normalnym języku. Czytanie definicji zasobu na wikipedii Myślę, że strona jest przykładem zasobu.
paulmorriss,
7

Nie jest tak, że wspomniany adres URL składa się zarówno z adresu URL, jak i części URN.

http://www.bernzilla.com/item.php?id=100 jest zarówno adresem URL, jak i identyfikatorem URI.

Zasadniczo identyfikatory URI są nadzbiorem adresów URL i URN. Adresy URL i URN również częściowo się pokrywają.

Identyfikator URI identyfikuje zasób według lokalizacji, nazwy lub obu.

Tak więc każdy adres URL jest identyfikatorem URI, każdy identyfikator URN jest identyfikatorem URI, ale nie każdy identyfikator URI jest adresem URL.

Kris
źródło