3. WebSocket URIs
Diese Spezifikation definiert zwei URI-Schemata unter Verwendung der ABNF-Syntax und Terminologie aus RFC 3986.
URI-Schema-Definitionen
ws-URI (Unverschlüsselt)
ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
- Schema-Name: ws
- Standardport: 80
- Zweck: Unverschlüsselte WebSocket-Verbindungen
Beispiele:
ws://example.com/socket
ws://example.com:8080/chat
ws://192.168.1.1/data
wss-URI (TLS-verschlüsselt)
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
- Schema-Name: wss
- Standardport: 443
- Zweck: TLS-verschlüsselte WebSocket-Verbindungen
Beispiele:
wss://example.com/socket
wss://secure.example.com:8443/chat
Beschreibung der URI-Komponenten
host (Host)
Die Host-Komponente kann sein:
- Domänenname:
example.com - IPv4-Adresse:
192.168.1.1 - IPv6-Adresse:
[2001:db8::1]
port (Port)
- Wenn weggelassen, wird der Standardport verwendet (80 für ws, 443 für wss)
- Kann jeden gültigen Port explizit angeben
path (Pfad)
- Muss mit
/beginnen - Standard ist
/wenn leer
query (Abfragezeichenfolge)
- Optionale Abfrageparameter
- Format:
?key1=value1&key2=value2
Sicherheitsüberlegungen
Empfohlen: wss:// verwenden
In Produktionsumgebungen wird dringend empfohlen, wss:// (TLS-verschlüsselt) anstelle von ws:// zu verwenden:
✅ Vorteile von wss://:
- Verschlüsselte Übertragung, verhindert Man-in-the-Middle-Angriffe
- Verhindert Datenabhören
- Bessere Firewall-Durchquerung
- Unterstützung für Browser-Sicherheitsrichtlinien (z. B. Mixed-Content-Richtlinie)
❌ Risiken von ws://:
- Daten werden im Klartext übertragen
- Leicht abzufangen und zu manipulieren
- Browser können ws://-Verbindungen von HTTPS-Seiten blockieren
Origin-Validierung
Server sollten den Origin-Header validieren, um sicherzustellen, dass nur Verbindungen aus vertrauenswürdigen Quellen akzeptiert werden:
// Beispiel für serverseitige Validierung
const allowedOrigins = ['https://example.com', 'https://app.example.com'];
const origin = request.headers['origin'];
if (!allowedOrigins.includes(origin)) {
response.status(403).send('Forbidden');
}
URI-Parsing-Beispiele
Beispiel 1: Vollständige URI
wss://chat.example.com:8443/room/general?user=alice
Analyseergebnis:
- Scheme: wss
- Host: chat.example.com
- Port: 8443
- Path: /room/general
- Query: user=alice
Beispiel 2: Minimale URI
ws://example.com
Analyseergebnis:
- Scheme: ws
- Host: example.com
- Port: 80 (Standard)
- Path: / (Standard)
- Query: (keine)
Beispiel 3: IPv6-Adresse
wss://[2001:db8::1]:443/socket
Analyseergebnis:
- Scheme: wss
- Host: 2001:db8::1
- Port: 443
- Path: /socket
Browser-Verwendungsbeispiele
JavaScript-Client
// Verbindung zu unverschlüsseltem WebSocket
const ws1 = new WebSocket('ws://example.com/socket');
// Verbindung zu TLS-verschlüsseltem WebSocket (empfohlen)
const ws2 = new WebSocket('wss://example.com/socket');
// Mit Port und Pfad
const ws3 = new WebSocket('wss://example.com:8443/chat/room1');
// Mit Abfrageparametern
const ws4 = new WebSocket('wss://example.com/socket?token=abc123');
Verwandte Spezifikationen
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
- RFC 2818: HTTP Over TLS
Referenzlinks
- Vorheriges Kapitel: 2. Conformance Requirements (Konformitätsanforderungen)
- Nächstes Kapitel: 4. Opening Handshake (Eröffnungs-Handshake)
- Implementierungsleitfaden: WebSocket-URI-Details