Zum Hauptinhalt springen

RFC 3986 - Uniform Resource Identifier (URI): Generische Syntax

Status: Internetstandard (STD 66)
Aktualisiert: RFC 1738
Ersetzt: RFC 2732, 2396, 1808
Autoren: T. Berners-Lee (W3C/MIT), R. Fielding (Day Software), L. Masinter (Adobe Systems)
Datum: Januar 2005

Zusammenfassung

Ein Uniform Resource Identifier (URI) ist eine kompakte Zeichenfolge, die eine abstrakte oder physische Ressource identifiziert.

Diese Spezifikation definiert:

  • Die generische URI-Syntax
  • Einen Prozess zur Auflösung von URI-Referenzen, die in relativer Form vorliegen können
  • Richtlinien und Sicherheitsüberlegungen für die Verwendung von URIs im Internet

Hauptmerkmale:

  • Die URI-Syntax definiert eine Grammatik, die eine Obermenge aller gültigen URIs ist
  • Ermöglicht Implementierungen, die gemeinsamen Komponenten einer URI-Referenz zu analysieren, ohne die schémaspezifischen Anforderungen jedes möglichen Identifikators zu kennen
  • Definiert keine generative Grammatik für URIs; diese Aufgabe wird von den einzelnen Spezifikationen jedes URI-Schemas durchgeführt

Bedeutung

RFC 3986 ist das Herzstück der Web-Infrastruktur:

  • 🌐 Definiert die generische Syntax für URLs und URNs
  • 🔗 Grundlage für alle Ressourcenlokalisierung im Web
  • 📋 Basis für alle Protokolle einschließlich HTTP, HTTPS, FTP
  • 🎯 Algorithmus zur Auflösung relativer URIs
  • 🔒 URI-Sicherheitsüberlegungen

Inhaltsverzeichnis

1. Einführung (Introduction)

  • 1.1 Überblick über URIs
    • 1.1.1 Generische Syntax
    • 1.1.2 Beispiele
    • 1.1.3 URI, URL und URN
  • 1.2 Designüberlegungen
    • 1.2.1 Transkription
    • 1.2.2 Trennung von Identifikation und Interaktion
    • 1.2.3 Hierarchische Identifikatoren
  • 1.3 Syntaxnotation

2. Zeichen (Characters)

  • 2.1 Prozent-Kodierung
  • 2.2 Reservierte Zeichen
  • 2.3 Nicht reservierte Zeichen
  • 2.4 Wann kodieren oder dekodieren
  • 2.5 Datenidentifikation

3. Syntaxkomponenten (Syntax Components)

  • 3.1 Schema
  • 3.2 Autorität
    • 3.2.1 Benutzerinformationen
    • 3.2.2 Host
    • 3.2.3 Port
  • 3.3 Pfad
  • 3.4 Abfrage
  • 3.5 Fragment

4. Verwendung (Usage)

  • 4.1 URI-Referenz
  • 4.2 Relative Referenz
  • 4.3 Absoluter URI
  • 4.4 Gleiche-Dokument-Referenz
  • 4.5 Suffix-Referenz

5. Referenzauflösung (Reference Resolution)

  • 5.1 Festlegung eines Basis-URI
  • 5.2 Relative Auflösung
  • 5.3 Komponentenrekonstruktion
  • 5.4 Beispiele zur Referenzauflösung

6. Normalisierung und Vergleich (Normalization and Comparison)

  • 6.1 Äquivalenz
  • 6.2 Vergleichsleiter

7. Sicherheitsüberlegungen (Security Considerations)

  • 7.1 Zuverlässigkeit und Konsistenz
  • 7.2 Böswillige Konstruktion
  • 7.3 Backend-Transkodierung
  • 7.4 Seltene IP-Adressformate
  • 7.5 Sensible Informationen
  • 7.6 Semantische Angriffe

8. IANA-Überlegungen (IANA Considerations)

9. Danksagungen (Acknowledgements)

10. Referenzen (References)

Anhänge (Appendices)

Schnellreferenz

URI Generische Syntax

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty

URI-Komponenten Beispiel

  foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment

Gängige URI-Schemas

SchemaZweckBeispiel
httpHTTP-Protokollhttp://www.example.com/
httpsSicheres HTTPhttps://www.example.com/
ftpDateiübertragungftp://ftp.example.com/file.txt
mailtoE-Mailmailto:[email protected]
fileLokale Dateifile:///path/to/file
dataInline-Datendata:text/plain;base64,SGVsbG8=
telTelefonnummertel:+1-800-555-1212

Reservierte Zeichen

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="

Nicht reservierte Zeichen

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"

Prozent-Kodierung

pct-encoded = "%" HEXDIG HEXDIG

Beispiele:
Leerzeichen → %20
"你" (Chinesisch) → %E4%BD%A0

URI vs URL vs URN

Beziehungsdiagramm

        URI (Uniform Resource Identifier)
/ \
URL URN
(Uniform Resource Locator) (Uniform Resource Name)
(Wie zugreifen) (Was es ist)

Vergleich

KonzeptFokusPersistenzBeispiel
URIIdentifikationNicht garantiertAlle URIs
URLStandortStandortabhängighttp://example.com/page
URNNamePersistenturn:isbn:0-486-27557-4

Wichtig: Alle URLs sind URIs, alle URNs sind URIs, aber nicht alle URIs sind URLs oder URNs.

Implementierungsanforderungen

Muss implementieren (MUST)

  • ✅ Grundlegende URI-Syntaxanalyse
  • ✅ Korrekte Prozent-Kodierungsbehandlung
  • ✅ Algorithmus zur Auflösung relativer URIs
  • ✅ Groß-/Kleinschreibung unabhängiges Schema und Host
  • ✅ Entfernung von Punktsegmenten in Pfaden

Sollte implementieren (SHOULD)

  • ✅ URI-Normalisierung
  • ✅ IRI-Unterstützung (Internationalisierte Ressourcen-Identifikatoren)
  • ✅ IPv6-Adressunterstützung
  • ✅ Sichere Benutzerinformationsbehandlung

Kann implementieren (MAY)

  • Schémaspezifische Validierung
  • URI-Äquivalenzvergleich
  • Automatische Normalisierung

Verwandte RFCs

  • RFC 1738: URL-Spezifikation (aktualisiert)
  • RFC 2396: URI Generische Syntax (ersetzt)
  • RFC 2732: IPv6-Adressformat (ersetzt)
  • RFC 3987: IRI (Internationalisierte Ressourcen-Identifikatoren)
  • RFC 6874: IPv6-Zonenbezeichner
  • RFC 7230: HTTP/1.1 Nachrichtensyntax
  • RFC 8820: URI-Design und Eigentum

Online-Ressourcen


Nächstes Kapitel: 1. Einführung (Introduction)