Odkrywanie URI, URL i URN
Ten przewodnik zawiera przegląd URI, URL i URN, wyjaśniając ich różnice oraz przypadki użycia.
Podczas tworzenia aplikacji internetowych często musimy wywoływać różne usługi webowe. Konfigurując komunikację i połączenie różnych usług webowych, często napotykamy na pojęcia takie jak URI, URL i URN. Zwykle użytkownicy mają trudności z ich rozróżnieniem, co prowadzi do mieszania lub nieprawidłowego użycia. W tym artykule podamy przykłady i wyjaśnimy różnice między nimi, aby pomóc wszystkim lepiej zrozumieć te pojęcia oraz poprawnie interpretować i używać ich podczas czytania blogów technicznych, dokumentacji lub komunikacji z innymi inżynierami.
Co to jest URL?
URL (Uniform Resource Locator) to adres internetowy lub lokalizacja zasobów w internecie. Zwykle jest używany do określenia lokalizacji stron internetowych, plików czy usług. URL zapewnia ustandaryzowany format dostępu do zasobów w sieci. Jest kluczowym elementem przeglądania internetu, linkowania oraz komunikacji internetowej.
URL składa się z kilku części, które razem definiują adres zasobu oraz protokół użyty do uzyskania do niego dostępu. Przyjrzyjmy się poniższemu URL-owi i wyjaśnijmy funkcje każdej części.
-
Schemat (Scheme): Określa protokół lub schemat użyty do uzyskania dostępu do zasobu, na przykład HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol) lub inne.
Schemat w URL to
https
. -
Host: Host określa nazwę domeny lub adres IP serwera, który udostępnia zasoby.
Host w URL to
example.logto.io
. -
Port: (Opcjonalny) Port reprezentuje konkretny numer portu na hoście uzyskując dostęp do zasobu. Jeśli port nie jest określony, domyślnie jest używany standardowy port dla danego schematu.
Domyślny port dla HTTP to 80, a dla HTTPS to 443.
Port w URL to
8080
. -
Ścieżka: (Opcjonalna) Ścieżka wskazuje konkretną lokalizację lub katalog na serwerze, w którym znajdują się zasoby, co może obejmować katalogi i nazwę plików.
Ścieżka w URL to
/blogs/index.html
. -
Parametry zapytania: (Opcjonalne) Parametry zapytania to dodatkowe parametry przekazywane do zasobu, zwykle używane w dynamicznych aplikacjach internetowych. Pojawiają się one po ścieżce i są oddzielone znakiem
?
.Parametry zapytania w URL to
param1=value1¶m2=value2
, które często są przedstawiane w formie par klucz-wartość, przy czym pary są oddzielone znakiem&
. W rzeczywistych scenariuszach użytkowania, często wymagane jest kodowanie, aby uniknąć niedozwolonych znaków jak spacja. -
Identyfikator fragmentu: (Opcjonalny) Może być również nazywany kotwicą, używany do lokalizowania konkretnej pozycji w zasobie.
Kotwica w URL to
#introduction
.
Dodatkowo, na przykład korzystanie z usług plikowych lub wiele przycisków "Kontakt" na stronach internetowych jest połączonych z URL-ami, takimi jak:
ftp://documents.logto.io/files/legal/soc_ii.pdf
mailto:[email protected]?subject=Enterprise%20quota%20request
Co to jest URI?
URI oznacza "Uniform Resource Identifier" . Jest to ciąg znaków, który identyfikuje konkretny zasób, taki jak strona internetowa, plik czy usługa. URI zapewnia sposób na jednoznaczne identyfikowanie i lokalizowanie zasobów za pomocą ustandaryzowanego formatu.
URI składa się głównie z dwóch komponentów:
- Schemat (Scheme): Określa protokół lub schemat użyty do uzyskania dostępu do zasobu.
- Identyfikator zasobów: Identyfikuje konkretny zasób, który jest uzyskiwany lub do którego jest odnoszony. Format identyfikatora zasobu zależy od stosowanego schematu.
Z gramatycznego punktu widzenia, URI głównie podąża za tym samym formatem co URL, jak określono w RFC 3986.
Chociaż format URI jest podobny do URL, nie zapewnia on dostępu do zasobu w sieci. Korzystanie z tego formatu może zmniejszyć konflikty nazw przestrzeni nazw.
W sekcji powyżej wprowadziliśmy URL-e, które nie tylko identyfikują zasób, ale również pomagają w zlokalizowaniu tego zasobu. W rzeczywistości URL-e są właściwym podzbiorem URI.
Co to jest URN?
URN nie jest tak powszechny jak URL i URI. Stoi za nim "Uniform Resource Name", a jego zadaniem jest identyfikacja zasobów w sposób trwały, nawet jeśli takie zasoby już nie istnieją.
W przeciwieństwie do URL, URN nie dostarcza żadnych informacji na temat lokalizacji zasobu; po prostu go identyfikuje, trochę jak czysty URI. Konkretne, URN jest rodzajem URI z schematem "urn" i posiada następującą strukturę, opisaną w RFC 2141:
<URN>:<NID>:<NSS>
- URN: Zwykle
urn
. - Identyfikator przestrzeni nazw (NID): Reprezentuje unikalną przestrzeń nazw lub system identyfikatorów, który definiuje i zarządza URN. Zapewnia kontekst i zapewnia unikalność identyfikatora. Przykładami przestrzeni nazw są ISBN (Międzynarodowy Standardowy Numer Książki) i inne.
- Przestrzeń specyficzna dla nazw (NSS): Jest to ciąg znaków, który jednoznacznie identyfikuje zasób w określonej przestrzeni nazw. Sam identyfikator nie przekazuje żadnych informacji na temat lokalizacji lub sposobu dostępu do zasobu.
Przykładowo, bardzo znana książka wprowadzająca w systemy komputerowe CSAPP ma swój numer ISBN reprezentowany jako URN urn:isbn:9780134092669
.
URN-y są często używane w różnych standardowych protokołach, takich jak asercje w protokole SAML, które odpowiadają URN-owi urn:oasis:names:tc:SAML:2.0:assertion
.
W inżynierii oprogramowania możemy również definiować URN-y dla konkretnych celów w naszych własnych systemach zgodnie z zasadami nazewnictwa URN. Na przykład, w Logto, aby włączyć Organizację, musisz dodać zakres urn:logto:scope:organizations
do konfiguracji podczas korzystania z SDK. Każda Organizacja ma także swoje własne dedykowane URN urn:logto:organization:{orgId}
.
Podsumowanie
Związek między URI, URL i URN można zilustrować za pomocą poniższego diagramu Venna:
URI, URL i URN mogą być używane do identyfikacji różnych zasobów, ale tylko URL może precyzyjnie lokalizować położenie zasobu.
URI i URL mogą obsługiwać różne schematy, takie jak HTTP, HTTPS, FTP, ale URN można uznać za wspierający jedynie schemat urn
.
Wszystkie URL-e lub URN-y są URI, ale nie wszystkie URI są URL-ami lub URN-ami.