Zum Hauptinhalt springen

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