Die Konzepte URI, URN und URL sind von grundlegender Bedeutung für die Internetkommunikation und cloudbasierte Technologien. Sie klingen ähnlich, fast gleich und doch hat jedes Akronym seine eigene Bedeutung. In diesem Blog-Artikel werden die Unterschiede zwischen den Begriffen erläutert.
URI
Ein URI (Uniform Resource Identifier) ist eine Zeichenkette, die verwendet wird, um eine Ressource im Internet zu identifizieren. Es handelt sich hierbei um einen umfassenden Begriff, der sowohl URLs als auch URNs einschließt. Es gibt zwei Haupttypen von URIs:
- URL (Uniform Resource Locator): Gibt den Standort einer Ressource an.
- URN (Uniform Resource Name): Gibt den Namen einer Ressource an, ohne ihren Standort zu implizieren.
Im Wesentlichen kann ein URI entweder eine URL, eine URN oder beides sein. Der wichtigste Aspekt einer URI ist, dass er als allgemeiner Bezeichner für eine Ressource dient.
URL
Eine URL ist ein URI-Typ, der beschreibt, wie eine Ressource im Netzwerk gefunden werden kann. Sie enthält Informationen wie das zu verwendende Protokoll (z.B. HTTP, FTP), den Hostnamen (z.B. www.beispiel.de) und manchmal einen Pfad oder eine Abfragezeichenfolge, um die spezifische Ressource zu identifizieren.
Beispiel für eine URL:
https://www.beispiel.de/index.html
Hier:
https
ist das Protokoll.www.beispiel.de
ist der Hostname./index.html
ist der Pfad zur spezifischen Ressource.
URN
Eine URN ist ein URI-Typ, der eine eindeutige und dauerhafte Kennung für eine Ressource bereitstellt, ohne ihren Standort oder den Zugriffsweg zu beschreiben. URNs sollen als dauerhafte, standortunabhängige Ressourcenkennung dienen.
Beispiel für eine URN:
urn:isbn:978-3-16-148410-0
Hier:
urn
zeigt an, dass es sich um eine URN handelt.isbn
ist der Namespace-Identifier.978-3-96111-268-5
ist der spezifische Ressourcenname innerhalb desisbn
Namespace.
Technische Details
Die allgemeine Form eines hierarchischen URI laut RFC 3986 ist:
URI = Scheme ":" ["//" Authority] Path ["?" Query] ["#" Fragment]
Die Bestandteile bedeuten:
-
Scheme: Identifiziert das Protokoll oder die Art des Zugriffs (Beispiele:
http
,https
,ftp
,mailto
,file
usw.). Das Schema legt oft den weiteren Syntaxaufbau fest (z.B. dass beihttp
nach//
eine Domain folgt). -
Authority: Hiermit ist die Zuständigkeitsangabe gemeint, typischerweise in Form von
//Benutzerinfo@Host:Port
. Meist besteht die Authority zumindest aus einem Hostnamen (z.B. eine Domain wiebeispiel.de
). Optional kann ein Benutzername (ggf. mit Kennwort) vorangestellt sein (z.B.benutzer:kennwort@beispiel.de
). Ebenfalls optional ist die Portnummer nach einem:
, falls der Zugriff nicht über den jeweiligen Standardport erfolgt (z.B.:8080
für HTTP über Port 8080). In vielen URL-Schemata ist die Authority gleichbedeutend mit dem Server, auf dem die Ressource liegt. -
Path: Der Pfad identifiziert die konkrete Ressource auf dem Host, oft analog zum Dateipfad im Dateisystem aufgebaut (z.B.
/verzeichnis/datei.html
). Der Pfad kann hierarchisch sein (mit/
getrennt). Wichtig: Seine Interpretation obliegt dem Server – nicht immer entspricht der URL-Pfad direkt einem physikalischen Dateipfad auf dem Server. Bei Web-APIs werden Pfade oft genutzt, um hierarchisch Objekte anzusprechen. -
Query: Mit
?
eingeleitete Parameter, typischerweise Schlüssel-Wert-Paare, die an die Ressource übergeben werden (z.B. Suchanfragen oder Filterangaben). Bei der URLhttps://www.beispiel.de/shop?item=123&ref=abc
wäreitem=123&ref=abc
die Query. Die Bedeutung der Parameter ist anwendungsspezifisch. -
Fragment: Ein mit
#
angehängter Teil, der nicht an den Server gesendet wird, sondern client-seitig verwendet wird, um auf einen bestimmten Abschnitt einer Ressource zu verweisen. Beispielsweise springtdocument.html#kapitel2
in einem HTML-Dokument zu der Stelle mit dem Ankerkapitel2
. Für Web-APIs werden Fragmente auch zur Navigation oder in Single-Page-Apps genutzt.
Für URNs weicht der Aufbau leicht ab. Eine URN beginnt mit dem Schema urn:
und enthält dann einen Namensraum-Identifier (NID), gefolgt von :
und dem namensraumspezifischen Teil.
Beispiel:
urn:ietf:rfc:3986
Hier ist ietf
der NID (Namensraum der IETF) und rfc:3986
der spezifische Name (nämlich das RFC-Objekt Nr. 3986). URN-Namensräume können hierarchisch weiter unterteilt sein, wie man am Doppelpunkt sieht.
Ein anderes Beispiel:
urn:isbn:978-013110362-7
Hier wird ein Buch über seine ISBN identifiziert. Der NID ist isbn
, der restliche Teil ist die ISBN als Name. Die Syntax für URNs wurde in RFC 2141 und aktuell RFC 8141 genau festgelegt, inklusive zulässiger Zeichen.
URNs enthalten keine Authority-Komponente und in der Regel auch keine Query- oder Fragment-Komponenten.
Trotz dieser kleinen Unterschiede gilt: Sämtliche URLs und URNs folgen dem gemeinsamen URI-Grundschema und verwenden einheitliche Zeichensätze und Escape-Mechanismen. Etwa müssen bestimmte Sonderzeichen in URIs prozent-kodiert werden (percent encoding), wenn sie nicht als Syntaxelement dienen. So wird z.B. ein Leerzeichen als %20
kodiert, oder ein #
in einem DOI muss als %23
kodiert werden, wenn der DOI in eine URN überführt wird. Dies stellt sicher, dass URIs eindeutig und korrekt übertragen werden können, selbst wenn sie in unterschiedlichsten Kontexten (in XML, in Plaintext, in APIs) verwendet werden.
Zusammenfassung
Noch mal zum Mitschreiben:
Geltungsbereich:
- Eine URI ist ein umfassender Begriff, der sowohl URLs als auch URNs einschließt.
Zweck:
-
URL: Wird verwendet, um den Standort einer Ressource anzugeben.
-
URN: Wird verwendet, um eine Ressource eindeutig zu benennen.
Struktur:
-
URL: Enthält Informationen darüber, wie auf eine Ressource zugegriffen werden kann (Protokoll, Hostname, Pfad).
-
URN: Enthält einen eindeutigen Namen innerhalb eines Namespace, ohne Standortinformationen.
Wichtige RFCs: