URI
URI steht fuer Uniform Resource Identifier und bezeichnet eine standardisierte Zeichenkette zur eindeutigen Identifizierung von Ressourcen. Der Begriff wurde 1994 von Tim Berners-Lee eingefuehrt und ist in RFC 3986 spezifiziert.
Ein URI kann eine abstrakte oder physische Ressource identifizieren - von einer Webseite ueber eine E-Mail-Adresse bis hin zu einem Buch. Du begegnest URIs taeglich, denn jede URL, die du in deinen Browser eingibst, ist eine spezielle Form eines URI.
Was ist der Unterschied zwischen URI, URL und URN?
Diese drei Begriffe werden oft verwechselt oder falsch verwendet. Das Verstaendnis ihrer Beziehung zueinander ist fundamental fuer die Arbeit mit Web-Technologien. Der Schluessel liegt in der Hierarchie: URI ist der Oberbegriff, waehrend URL und URN spezielle Auspraegungen sind.
URI als Oberbegriff
Ein URI (Uniform Resource Identifier) ist jede Art von Kennung, die eine Ressource eindeutig identifiziert. RFC 3986 definiert die allgemeine Syntax, die fuer alle URIs gilt. Ein URI kann eine Ressource auf zwei Arten identifizieren: durch ihre Lokation (wo sie sich befindet) oder durch ihren Namen (wie sie heisst).
URL - Lokalisierung einer Ressource
Eine URL (Uniform Resource Locator) ist ein URI, der eine Ressource durch ihren Zugriffsweg identifiziert. Sie gibt an, wo sich eine Ressource befindet und wie du darauf zugreifen kannst. Jede Webadresse, die du im Browser verwendest, ist eine URL.
https://ausbildung-in-der-it.de/lexikon/uri
mailto:info@example.de
ftp://files.example.com/downloads/datei.zip
URN - Benennung einer Ressource
Ein URN (Uniform Resource Name) ist ein URI, der eine Ressource durch einen eindeutigen, persistenten Namen identifiziert - unabhaengig von ihrem Standort. URNs bleiben gueltig, auch wenn die Ressource verschoben wird oder nicht mehr verfuegbar ist. Sie sind wie ein Eigenname fuer eine Ressource.
urn:isbn:978-3-446-44285-6
urn:ietf:rfc:3986
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
Vergleich: URI vs. URL vs. URN
Die folgende Tabelle zeigt die wesentlichen Unterschiede zwischen den drei Konzepten:
| Aspekt | URI | URL | URN |
|---|---|---|---|
| Funktion | Identifiziert eine Ressource | Lokalisiert und ermoeglicht Zugriff | Benennt persistent |
| Enthaelt Standort | Moeglich | Ja, immer | Nein |
| Enthaelt Protokoll | Moeglich | Ja, immer | Nein (beginnt mit urn:) |
| Beispiel | Beide Formen | https://example.de |
urn:isbn:123456 |
Eine nuetzliche Analogie: Stell dir eine Person vor. Der URN ist ihr Name (Max Mustermann), die URL ist ihre Adresse (Musterstrasse 1, 12345 Musterstadt), und URI ist der Oberbegriff fuer beide Identifikationsarten.
Syntax und Aufbau eines URI
RFC 3986 definiert eine generische URI-Syntax, die aus fuenf Hauptkomponenten besteht. Nicht alle Komponenten muessen in jedem URI vorhanden sein - die einzig erforderliche ist das Schema.
schema:[//authority]path[?query][#fragment]
Schema (Scheme)
Das Schema steht am Anfang eines URI, gefolgt von einem Doppelpunkt. Es gibt an, welche Regeln fuer die Interpretation des restlichen URI gelten. Bei URLs bezeichnet es typischerweise das Zugriffsprotokoll.
- https / http - Webseiten (Hypertext Transfer Protocol)
- ftp - Dateitransfer (File Transfer Protocol)
- mailto - E-Mail-Adressen
- tel - Telefonnummern
- file - Lokale Dateien
- urn - Persistent benannte Ressourcen
- data - Eingebettete Daten (Base64)
Authority
Die Authority-Komponente beginnt mit zwei Schraegstrichen (//) und enthaelt typischerweise den Hostnamen oder die IP-Adresse des Servers. Optional koennen auch Benutzerinformationen und ein Port angegeben werden:
//[userinfo@]host[:port]
# Beispiele:
//www.example.de
//benutzer:passwort@server.example.de:8080
//192.168.1.1:3000
Der Host kann ein DNS-Domainname oder eine IP-Adresse sein. Der Port wird durch einen Doppelpunkt vom Host getrennt und gibt den Netzwerk-Port fuer die Verbindung an.
Path
Der Pfad identifiziert eine spezifische Ressource innerhalb des durch die Authority definierten Bereichs. Bei hierarchischen URIs werden Segmente durch Schraegstriche getrennt, aehnlich wie Ordner in einem Dateisystem:
/lexikon/uri-uniform-resource-identifier
/api/v2/users/123
/downloads/dokumente/handbuch.pdf
Query
Die Query-Komponente beginnt mit einem Fragezeichen (?) und enthaelt nicht-hierarchische Daten, meist in Form von Schluessel-Wert-Paaren. Sie wird haeufig fuer Suchparameter, Filter oder Konfigurationsoptionen verwendet:
?suche=uri&sortierung=relevanz&seite=1
?id=12345
?utm_source=newsletter&utm_medium=email
Fragment
Das Fragment (auch Anker genannt) beginnt mit einem Rautezeichen (#) und verweist auf einen spezifischen Teil innerhalb der Ressource. Ein wichtiger Unterschied: Das Fragment wird nicht an den Server gesendet, sondern ausschliesslich vom Client (Browser) verarbeitet.
https://example.de/artikel#kapitel-3
https://example.de/dokument.html#section-2.1
Vollstaendiges URI-Beispiel
Das folgende Beispiel zeigt einen URI mit allen moeglichen Komponenten:
https://benutzer:passwort@www.example.de:8080/pfad/zur/seite?parameter=wert&filter=aktiv#abschnitt
|_____| |_______________| |____________|____| |_________| |________________________| |_______|
Schema Userinfo Host Port Path Query Fragment
|_________________________________________|
Authority
In der Praxis sehen die meisten URIs deutlich einfacher aus. Eine typische Web-URL wie https://ausbildung-in-der-it.de/lexikon enthaelt nur Schema, Host und Pfad.
URI-Referenzen und Aufloesung
Neben vollstaendigen URIs gibt es auch URI-Referenzen, die relativ zu einem Basis-URI interpretiert werden. Diese relativen Referenzen sind in der Webentwicklung besonders wichtig, da sie das Erstellen von Links innerhalb einer Website vereinfachen.
Absolute vs. relative URI-Referenzen
Eine absolute URI-Referenz ist ein vollstaendiger URI mit Schema. Eine relative URI-Referenz enthaelt nur einen Teil und wird gegen einen Basis-URI aufgeloest:
# Basis-URI:
https://example.de/verzeichnis/seite.html
# Relative Referenzen und ihre Aufloesung:
"andere-seite.html" -> https://example.de/verzeichnis/andere-seite.html
"/root/pfad" -> https://example.de/root/pfad
"../oberhalb" -> https://example.de/oberhalb
"?neuer-query" -> https://example.de/verzeichnis/seite.html?neuer-query
"#neues-fragment" -> https://example.de/verzeichnis/seite.html#neues-fragment
"//anderer-server.de" -> https://anderer-server.de
RFC 3986 definiert einen praezisen Algorithmus zur Aufloesung relativer Referenzen. Browser und Programmiersprachen implementieren diesen Algorithmus, sodass du relative Links ohne manuelle Berechnung verwenden kannst.
URI-Encoding (Prozent-Kodierung)
URIs duerfen nur eine begrenzte Menge an Zeichen enthalten. Sonderzeichen, Umlaute und andere nicht erlaubte Zeichen muessen durch Prozent-Kodierung (Percent-Encoding) dargestellt werden. Dabei wird jedes Byte des Zeichens als %HH kodiert, wobei HH der hexadezimale Wert ist.
Reservierte und nicht-reservierte Zeichen
RFC 3986 unterscheidet zwischen reservierten und nicht-reservierten Zeichen. Reservierte Zeichen haben innerhalb eines URI eine spezielle Bedeutung als Trennzeichen:
Reservierte Zeichen (Trennfunktion):
: / ? # [ ] @ ! $ & ' ( ) * + , ; =
Nicht-reservierte Zeichen (immer erlaubt):
A-Z a-z 0-9 - . _ ~
Wenn du ein reserviertes Zeichen als Daten (nicht als Trennzeichen) verwenden moechtest, muss es kodiert werden. Umlaute und andere Nicht-ASCII-Zeichen werden in UTF-8 konvertiert und dann prozent-kodiert.
Beispiele fuer URI-Encoding
| Zeichen | Kodiert | Beschreibung |
|---|---|---|
| Leerzeichen | %20 |
Haeufigste Kodierung |
| ae | %C3%A4 |
Deutscher Umlaut (UTF-8) |
| oe | %C3%B6 |
Deutscher Umlaut (UTF-8) |
| ue | %C3%BC |
Deutscher Umlaut (UTF-8) |
| & | %26 |
Kaufmanns-Und |
| / | %2F |
Schraegstrich (als Daten) |
| ? | %3F |
Fragezeichen (als Daten) |
# Beispiel: Suche nach "Pruefung IHK 2024"
https://example.de/suche?q=Pr%C3%BCfung%20IHK%202024
URIs in der Softwareentwicklung
URIs spielen in der modernen Softwareentwicklung eine zentrale Rolle. Sie sind nicht nur Webadressen, sondern dienen als universelle Identifikatoren in vielen Bereichen der IT.
URIs in REST-APIs
In REST-APIs identifizieren URIs Ressourcen, waehrend HTTP-Methoden die Aktionen definieren. Ein gut gestaltetes URI-Schema ist essentiell fuer eine verstaendliche API:
GET /api/users # Alle Benutzer abrufen
GET /api/users/123 # Benutzer mit ID 123
POST /api/users # Neuen Benutzer erstellen
PUT /api/users/123 # Benutzer 123 aktualisieren
DELETE /api/users/123 # Benutzer 123 loeschen
GET /api/users/123/orders # Bestellungen von Benutzer 123
URIs als Namensraeume
In XML und RDF (Resource Description Framework) werden URIs als Namensraeume verwendet, um Elemente eindeutig zu identifizieren. Auch wenn diese URIs oft wie URLs aussehen, muessen sie nicht unbedingt aufloesbur sein:
<root xmlns="http://example.org/schema/2024"
xmlns:custom="http://example.org/custom">
<custom:element>Wert</custom:element>
</root>
URI-Verarbeitung in Programmiersprachen
Alle gaengigen Programmiersprachen bieten Bibliotheken zur Verarbeitung von URIs. Hier ein Beispiel in JavaScript:
const uri = new URL('https://example.de/pfad?name=wert#abschnitt');
console.log(uri.protocol); // "https:"
console.log(uri.hostname); // "example.de"
console.log(uri.pathname); // "/pfad"
console.log(uri.search); // "?name=wert"
console.log(uri.hash); // "#abschnitt"
// Query-Parameter manipulieren
uri.searchParams.append('neu', 'parameter');
console.log(uri.href); // "https://example.de/pfad?name=wert&neu=parameter#abschnitt"
Geschichte und Standards
Die Geschichte der URIs ist eng mit der Entwicklung des World Wide Web verbunden. Tim Berners-Lee fuehrte das Konzept 1994 als Teil seiner Vision eines universellen Informationsraums ein.
Wichtige RFC-Dokumente
Die Entwicklung der URI-Standards laesst sich anhand der IETF RFCs nachvollziehen:
- RFC 1630 (1994): Erste Dokumentation von URIs als informelles Dokument
- RFC 2396 (1998): Erste formale URI-Spezifikation, fuehrte die generische Syntax ein
- RFC 3986 (2005): Aktuelle und massgebliche URI-Spezifikation, Internet-Standard STD 66
- RFC 3987 (2005): IRI-Spezifikation (Internationalized Resource Identifiers) fuer nicht-ASCII-Zeichen
RFC 3986 ist heute der massgebliche Standard fuer URIs. Er wurde als Internet-Standard (STD 66) veroeffentlicht, was seine fundamentale Bedeutung fuer das Internet unterstreicht.
URIs in der IT-Praxis
Das Verstaendnis von URIs ist fundamental fuer die Arbeit im IT-Bereich. Als Fachinformatiker fuer Anwendungsentwicklung entwirfst du URI-Schemata fuer APIs, verarbeitest Benutzer-Eingaben und implementierst Routing in Web-Frameworks. Die korrekte Handhabung von URI-Encoding ist dabei essentiell, um Sicherheitsluecken wie Injection-Angriffe zu vermeiden.
Als Fachinformatiker fuer Systemintegration begegnest du URIs bei der Konfiguration von Webservern, Proxy-Einstellungen und beim Debugging von Netzwerkproblemen. Das Verstehen der URI-Struktur hilft dir, Fehler in Webanwendungen schneller zu diagnostizieren.
Quellen und weiterfuehrende Links
- RFC 3986 - URI Generic Syntax - Offizielle URI-Spezifikation (IETF)
- MDN Web Docs: URL API - JavaScript-Dokumentation zur URI-Verarbeitung
- W3C - Tim Berners-Lee - Erfinder des World Wide Web und der URI-Konzeption