RFC 6455 - The WebSocket Protocol (Das WebSocket-Protokoll)
Veröffentlichungsdatum: Dezember 2011
Status: Standards Track
Autoren: I. Fette (Google Inc.), A. Melnikov (Isode Ltd.)
Zusammenfassung (Abstract)
Das WebSocket-Protokoll (WebSocket Protocol) ermöglicht Vollduplex-Kommunikation (Full-Duplex Communication) zwischen einem Client und einem Server über eine einzelne TCP-Verbindung. Das WebSocket-Protokoll ist für die Implementierung in Webbrowsern und Webservern konzipiert, kann aber von jeder Client- oder Serveranwendung verwendet werden.
Das WebSocket-Protokoll ist ein unabhängiges TCP-basiertes Protokoll. Seine einzige Beziehung zu HTTP besteht darin, dass sein Handshake von HTTP-Servern als Upgrade-Anfrage (Upgrade Request) interpretiert wird.
Inhaltsverzeichnis (Table of Contents)
- 1. Introduction (Einführung)
- 1.1 Background (Hintergrund)
- 1.2 Protocol Overview (Protokollübersicht)
- 1.3 Opening Handshake (Eröffnungs-Handshake)
- 1.4 Closing Handshake (Abschluss-Handshake)
- 1.5 Design Philosophy (Designphilosophie)
- 1.6 Security Model (Sicherheitsmodell)
- 1.7 Relationship to TCP and HTTP (Beziehung zu TCP und HTTP)
- 1.8 Establishing a Connection (Verbindungsaufbau)
- 1.9 Subprotocols and Extensions (Unterprotokolle und Erweiterungen)
- 2. Conformance Requirements (Konformitätsanforderungen)
- 2.1 Terminology and Other Conventions (Terminologie und andere Konventionen)
- 3. WebSocket URIs
- 4. Opening Handshake (Eröffnungs-Handshake)
- 4.1 Client Requirements (Client-Anforderungen)
- 4.2 Server-Side Requirements (Serverseitige Anforderungen)
- 4.3 Collecting Extensions and Subprotocols (Sammeln von Erweiterungen und Unterprotokollen)
- 4.4 Supporting Multiple Versions (Unterstützung mehrerer Versionen)
- 5. Data Framing (Daten-Framing)
- 5.1 Overview (Übersicht)
- 5.2 Base Framing Protocol (Basis-Framing-Protokoll)
- 5.3 Client-to-Server Masking (Client-zu-Server-Maskierung)
- 5.4 Fragmentation (Fragmentierung)
- 5.5 Control Frames (Steuerungsframes)
- 5.6 Data Frames (Datenframes)
- 5.7 Examples (Beispiele)
- 5.8 Extensibility (Erweiterbarkeit)
- 6. Sending and Receiving Data (Senden und Empfangen von Daten)
- 6.1 Sending Data (Daten senden)
- 6.2 Receiving Data (Daten empfangen)
- 7. Closing the Connection (Verbindung schließen)
- 7.1 Definitions (Definitionen)
- 7.2 Abnormal Closures (Abnormale Schließungen)
- 7.3 Normal Closure (Normale Schließung)
- 7.4 Status Codes (Statuscodes)
- 8. Error Handling (Fehlerbehandlung)
- 8.1 Handling Errors in UTF-8-Encoded Data (Fehlerbehandlung bei UTF-8-kodierten Daten)
- 9. Extensions (Erweiterungen)
- 9.1 Negotiating Extensions (Verhandlung von Erweiterungen)
- 9.2 Known Extensions (Bekannte Erweiterungen)
- 10. Security Considerations (Sicherheitsüberlegungen)
- 10.1 Non-Browser Clients (Nicht-Browser-Clients)
- 10.2 Origin Considerations (Überlegungen zur Herkunft)
- 10.3 Attacks On Infrastructure (Angriffe auf die Infrastruktur)
- 10.4 Implementation-Specific Limits (Implementierungsspezifische Grenzen)
- 10.5 WebSocket Client Authentication (WebSocket-Client-Authentifizierung)
- 10.6 Connection Confidentiality and Integrity (Vertraulichkeit und Integrität der Verbindung)
- 10.7 Handling of Invalid Data (Behandlung ungültiger Daten)
- 10.8 Use of SHA-1 (Verwendung von SHA-1)
- 11. IANA Considerations (IANA-Überlegungen)
- 12. Using WebSocket Protocol from Other Specifications (Verwendung des WebSocket-Protokolls aus anderen Spezifikationen)
- 13. Acknowledgements (Danksagungen)
- 14. References (Referenzen)
- 14.1 Normative References (Normative Referenzen)
- 14.2 Informative References (Informative Referenzen)
Zusätzliche Ressourcen
- 📖 Implementierungsleitfaden: WebSocket-Protokoll-Implementierungsleitfaden - Detaillierte technische Dokumentation, Codebeispiele und Best Practices
- 🔗 Offizielles RFC: RFC 6455
- 📋 DataTracker: RFC 6455 DataTracker
- 🐛 Errata: RFC Editor Errata
Verwandte RFCs
- RFC 6455: The WebSocket Protocol ← Dieses Dokument
- RFC 7692: WebSocket Compression Extensions (WebSocket-Komprimierungserweiterungen)
- RFC 8441: Bootstrapping WebSockets with HTTP/2 (Bootstrapping von WebSockets mit HTTP/2)
Schnellreferenz
WebSocket-URI-Format
ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
ws://- Unverschlüsselte Verbindung (Standardport 80)wss://- TLS-verschlüsselte Verbindung (Standardport 443, empfohlen für Produktion)
Handshake-Beispiel
Client-Anfrage:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: http://example.com
Server-Antwort:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Frame-Typen (Opcode)
| Opcode | Typ | Beschreibung |
|---|---|---|
| 0x0 | Continuation | Fortsetzungsframe |
| 0x1 | Text | Textframe (UTF-8) |
| 0x2 | Binary | Binärframe |
| 0x8 | Close | Schließungsframe |
| 0x9 | Ping | Ping-Frame (Heartbeat) |
| 0xA | Pong | Pong-Frame (Heartbeat-Antwort) |
Schließungs-Statuscodes
| Code | Name | Beschreibung |
|---|---|---|
| 1000 | Normal Closure | Normale Schließung |
| 1001 | Going Away | Endpunkt geht weg (z.B. Seitennavigation) |
| 1002 | Protocol Error | Protokollfehler |
| 1003 | Unsupported Data | Nicht unterstützter Datentyp |
| 1006 | Abnormal Closure | Abnormale Schließung (kein Close-Frame gesendet) |
| 1009 | Message Too Big | Nachricht zu groß |
| 1011 | Internal Error | Interner Serverfehler |
Frame-Struktur (Grundformat)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+-------------------------------+
| Extended payload length continued, if payload len == 127 |
+-------------------------------+-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------+-------------------------------+
Wichtige Punkte:
- FIN: 1=letzter Frame, 0=weitere Frames folgen
- MASK: muss 1 für Client→Server sein, muss 0 für Server→Client sein
- Opcode: Frame-Typ-Identifikator
- Payload Length: Datenlänge (0-125 direkt, 126 verwendet 16-Bit, 127 verwendet 64-Bit)
Hauptterminologie
| Englischer Begriff | Deutscher Begriff | Beschreibung |
|---|---|---|
| Full-Duplex Communication | Vollduplex-Kommunikation | Bidirektionale simultane Kommunikation |
| Opening Handshake | Eröffnungs-Handshake | HTTP-Upgrade-Prozess zu WebSocket |
| Closing Handshake | Abschluss-Handshake | Prozess des ordnungsgemäßen Verbindungsabschlusses |
| Frame | Frame | Grundeinheit der Datenübertragung |
| Message | Nachricht | Besteht aus einem oder mehreren Frames |
| Masking | Maskierung | Client-Daten müssen maskiert werden (Sicherheitsmechanismus) |
| Fragmentation | Fragmentierung | Große Nachrichten werden in mehreren Frames übertragen |