RFC 3986 - Uniform Resource Identifier (URI): Generische Syntax
- Status: Internet Standard
- Veröffentlicht: January 2005
- Stream: IETF
- Aktualisiert: RFC1738
- Ersetzt: RFC1808, RFC2396, RFC2732
- Errata: Keine Errata
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)
Glossary (Glossar)
Definitionen der in RFC 3986 verwendeten wichtigsten URI-Begriffe.
A
Absolute URI (Absoluter URI)
URI, der ein Schema enthält, aber kein Fragment. Wird verwendet, um eine Ressource unabhängig zu identifizieren.
Authority (Autorität)
URI-Komponente, die Benutzerinformationen, Host und Port enthält. Format: [userinfo@]host[:port]
B
Base URI (Basis-URI)
Absoluter URI, der zur Auflösung relativer Referenzen verwendet wird.
C
Character Encoding (Zeichenkodierung)
Abbildung von Zeichen auf Oktette.
D
Dereference (Dereferenzierung)
Ausführung einer Operation auf der durch einen URI bezeichneten Ressource mittels eines Zugriffsmechanismus.
Dot Segment (Punkt-Segment)
Pfadsegment . oder .., das zur Navigation in relativen Pfaden dient.
F
Fragment
Optionale URI-Komponente, getrennt durch #, die eine sekundäre Ressource identifiziert.
G
gen-delims (allgemeine Trennzeichen)
Teilmenge reservierter Zeichen: : / ? # [ ] @
H
Host
Teil der Autoritätskomponente, kann eine IP-Adresse oder ein Domainname sein.
hier-part (hierarchischer Teil)
Hauptstruktur des URI, enthält Autorität und Pfad.
Hierarchical Identifiers (Hierarchische Bezeichner)
Die URI-Syntax ist von links nach rechts hierarchisch nach abnehmender Bedeutung gegliedert.
I
IRI (Internationalisierter Ressourcenbezeichner)
URI-Erweiterung, die die Verwendung von Unicode-Zeichen erlaubt (RFC 3987).
L
Late-Binding (Späte Bindung)
Das Ergebnis einer URI-Referenz wird in der Regel erst beim Zugriff bestimmt und kann sich im Lauf der Zeit oder mit anderen Aspekten der Interaktion ändern.
N
Normalization (Normalisierung)
Vorgang der Überführung eines URI in eine kanonische Form, um Vergleiche zu ermöglichen.
P
Path (Pfad)
URI-Komponente, die eine Ressource im Autoritätsbereich identifiziert.
Percent-Encoding (Prozent-Kodierung)
Kodierung von Zeichen mit % gefolgt von zwei Hexadezimalziffern.
Port
Optionale Autoritätskomponente, die einen Netzwerkport angibt.
Q
Query (Abfrage)
Optionale URI-Komponente, getrennt durch ?, überträgt nicht-hierarchische Daten.
R
Reserved Characters (Reservierte Zeichen)
Zeichensatz mit besonderer Bedeutung in URIs.
Relative Reference (Relative Referenz)
URI-Referenz, die nicht mit einem Schema beginnt, wird relativ zu einem Basis-URI aufgelöst.
Representation (Repräsentation)
Aufzeichnung des Zustands einer Ressource zu einem bestimmten Zeitpunkt.
Resolution (Auflösung)
Vorgang der Umwandlung einer relativen Referenz in einen absoluten URI.
Retrieval (Abruf)
Erlangen einer Repräsentation der zugehörigen Ressource mithilfe eines URI.
S
Same-Document Reference (Referenz auf dasselbe Dokument)
Referenz, die aus einer leeren Zeichenkette oder nur aus einer Fragment-Komponente besteht.
Scheme (Schema)
Erste Komponente eines URI, definiert den Namensraum des Bezeichners.
Scheme-Based Normalization (Schemabasierte Normalisierung)
Anwendung schemaspezifischer Regeln, z. B. Ergänzung des Standardports :80 bei HTTP-URIs.
Simple String Comparison (Einfacher Zeichenkettenvergleich)
Zeichenweiser Vergleich zweier URIs.
sub-delims (Unter-Trennzeichen)
Teilmenge reservierter Zeichen: ! $ & ' ( ) * + , ; =
Syntax-Based Normalization (Syntaxbasierte Normalisierung)
Anwendung schemaunabhängiger Normalisierungsregeln: Groß-/Kleinschreibungsnormalisierung (Schema und Host sind case-insensitive), Normalisierung der Prozentkodierung sowie Normalisierung der Pfadsegmente (Entfernen von . und ..).
T
Transcription (Transkription)
URIs sind für die weltweite Transkription ausgelegt und verwenden einen eingeschränkten Zeichensatz, um die Eingabe über Sprachen und Regionen hinweg zu erleichtern.
U
Unreserved Characters (Nicht-reservierte Zeichen)
Zeichen, die in URIs verwendet werden können, aber keine reservierte Verwendung haben: A-Z a-z 0-9 - . _ ~
URI (Uniform Resource Identifier)
Kompakte Zeichenfolge, die eine abstrakte oder physische Ressource identifiziert.
URI Reference (URI-Referenz)
URI oder relative Referenz.
URL (Uniform Resource Locator)
Teilmenge von URIs, die einen Zugriffsmechanismus bereitstellen.
URN (Uniform Resource Name)
Persistenter, ortsunabhängiger Bezeichner.
Userinfo (Benutzerinformation)
Optionaler Teil der Autoritätskomponente, vor @.
Zurück: RFC 3986 Startseite