HTTP Sec-WebSocket-Protocol Header

Der HTTP-Header Sec-WebSocket-Protocol ist ein Request- und Response-Header für WebSocket-Subprotocol-Negotiation nach RFC 6455. Client listet unterstützte Subprotokolle, Server wählt genau eines aus. Ermöglicht standardisierte Protokolle wie STOMP, WAMP oder MQTT über WebSocket.

Typ

Request-Header, Response-Header

Syntax

Der Header listet Subprotocol-Namen als kommagetrennte Strings.

http
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Protocol: wamp

Direktiven

Die Direktiven definieren Application-Layer-Protokolle über WebSocket-Transport.

chat
Beispiel-Subprotocol für Chat-Applications. Definiert Message-Format und Semantik über WebSocket-Frames.
wamp
Web Application Messaging Protocol. RPC und PubSub über WebSocket, standardisiert durch WAMP-Spec.
stomp
Simple Text Oriented Messaging Protocol. Message-Broker-Protocol ähnlich AMQP, kann über WebSocket transportiert werden.
mqtt
Message Queuing Telemetry Transport. IoT-Protocol für Sensor-Networks, MQTT-over-WebSocket für Browser-Clients.
soap
SOAP-over-WebSocket für Legacy-Enterprise-Integrations. Bidirektionales SOAP statt Request-Response über HTTP.

Beispiele

Nachfolgend finden Sie praktische Anwendungsbeispiele für den Sec-WebSocket-Protocol-Header.

Beispiel 1 STOMP Message Broker Connection

http
GET /messaging HTTP/1.1
Host: broker.example.com
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Protocol: v12.stomp, v11.stomp

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: v12.stomp

Client unterstützt STOMP v11 und v12, Server wählt neuere Version v12. Alle Messages folgen STOMP-Frame-Format.

Beispiel 2 WAMP RPC Router

http
GET /wamp HTTP/1.1
Host: rpc.example.com
Sec-WebSocket-Protocol: wamp.2.json, wamp.2.msgpack

HTTP/1.1 101 Switching Protocols
Sec-WebSocket-Protocol: wamp.2.json

WAMP-Client bietet JSON und MessagePack Serialization an, Server wählt JSON-Variante für Debugging-Freundlichkeit.

Beispiel 3 Server unterstuetzt kein Subprotocol

http
GET /ws HTTP/1.1
Sec-WebSocket-Protocol: unknown-protocol

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

Server akzeptiert WebSocket aber unterstützt kein Client-Subprotocol, sendet keinen Sec-WebSocket-Protocol Header. Client muss Fallback auf generisches Protocol haben.

Subprotocol Negotiation Flow

WebSocket Subprotocol Negotiation Ablauf

Vorteile für die Systemarchitektur

  • Protocol Standardization: Standardisierte Subprotokolle ermöglichen Interoperability zwischen verschiedenen Client- und Server-Implementierungen
  • Backward Compatibility: Versionierung von Subprotocols erlaubt schrittweise Protocol-Evolution ohne Breaking Changes
  • Flexible Message Encoding: WAMP unterstützt JSON und MessagePack, Server kann optimal zwischen Human-Readable und Binary-Efficiency wählen

Spezifikation

RFC 6455, Section 4.1 – WebSocket Protocol https://www.rfc-editor.org/rfc/rfc6455.html#section-4.1

Weitere Spezifikationen

Sec-WebSocket-Extensions Header, Sec-WebSocket-Version Header