Zum Hauptinhalt springen

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)


Zusätzliche Ressourcen


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)

OpcodeTypBeschreibung
0x0ContinuationFortsetzungsframe
0x1TextTextframe (UTF-8)
0x2BinaryBinärframe
0x8CloseSchließungsframe
0x9PingPing-Frame (Heartbeat)
0xAPongPong-Frame (Heartbeat-Antwort)

Schließungs-Statuscodes

CodeNameBeschreibung
1000Normal ClosureNormale Schließung
1001Going AwayEndpunkt geht weg (z.B. Seitennavigation)
1002Protocol ErrorProtokollfehler
1003Unsupported DataNicht unterstützter Datentyp
1006Abnormal ClosureAbnormale Schließung (kein Close-Frame gesendet)
1009Message Too BigNachricht zu groß
1011Internal ErrorInterner 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 BegriffDeutscher BegriffBeschreibung
Full-Duplex CommunicationVollduplex-KommunikationBidirektionale simultane Kommunikation
Opening HandshakeEröffnungs-HandshakeHTTP-Upgrade-Prozess zu WebSocket
Closing HandshakeAbschluss-HandshakeProzess des ordnungsgemäßen Verbindungsabschlusses
FrameFrameGrundeinheit der Datenübertragung
MessageNachrichtBesteht aus einem oder mehreren Frames
MaskingMaskierungClient-Daten müssen maskiert werden (Sicherheitsmechanismus)
FragmentationFragmentierungGroße Nachrichten werden in mehreren Frames übertragen