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)
- Anhang A. Gesammelte ABNF für URI
- Anhang B. Analyse einer URI-Referenz mit regulärem Ausdruck
- Anhang C. Abgrenzung eines URI im Kontext
- Anhang D. Änderungen gegenüber RFC 2396
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
| Schema | Zweck | Beispiel |
|---|---|---|
| http | HTTP-Protokoll | http://www.example.com/ |
| https | Sicheres HTTP | https://www.example.com/ |
| ftp | Dateiübertragung | ftp://ftp.example.com/file.txt |
| mailto | mailto:[email protected] | |
| file | Lokale Datei | file:///path/to/file |
| data | Inline-Daten | data:text/plain;base64,SGVsbG8= |
| tel | Telefonnummer | tel:+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
| Konzept | Fokus | Persistenz | Beispiel |
|---|---|---|---|
| URI | Identifikation | Nicht garantiert | Alle URIs |
| URL | Standort | Standortabhängig | http://example.com/page |
| URN | Name | Persistent | urn: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)