HTTP Sec-WebSocket-Extensions Header

Der HTTP-Header Sec-WebSocket-Extensions ist ein Request- und Response-Header für WebSocket-Extension-Negotiation nach RFC 6455. Client listet gewünschte Extensions, Server antwortet mit akzeptierten Extensions. Häufigste Extension ist permessage-deflate für Compression.

Typ

Request-Header, Response-Header

Syntax

Der Header listet Extension-Namen mit optionalen Parametern.

http
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits=15

Direktiven

Die Direktiven definieren WebSocket-Protocol-Extensions und deren Parameter.

permessage-deflate
DEFLATE-Compression per Message nach RFC 7692. Reduziert Bandbreite für Text-Messages, erhöht CPU-Usage. Häufigste Extension.
client_max_window_bits
Parameter für permessage-deflate. Maximale LZ77-Sliding-Window-Size für Client (8-15). Höhere Werte = bessere Compression, mehr Memory.
server_max_window_bits
Analog zu client_max_window_bits aber für Server-Side Compression. Beide Seiten können unterschiedliche Window-Sizes haben.
client_no_context_takeover
Verhindert Context-Reuse zwischen Messages auf Client-Side. Bessere Compression-Ratio aber höherer CPU-Overhead.
server_no_context_takeover
Analog für Server-Side. Nützlich für Shared-Server mit vielen Connections um Memory zu sparen.

Beispiele

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

Beispiel 1 Client fordert Compression an

http
GET /realtime HTTP/1.1
Host: chat.example.com
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits=15

Server akzeptiert Compression-Extension, negotiiert Window-Bits Parameter. Alle nachfolgenden Messages werden DEFLATE-compressed.

Beispiel 2 Mehrere Extensions Request

http
GET /stream HTTP/1.1
Host: data.example.com
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame

HTTP/1.1 101 Switching Protocols
Sec-WebSocket-Extensions: permessage-deflate

Client fordert Standard-Extension plus proprietäre Extension an, Server akzeptiert nur Standard permessage-deflate.

Beispiel 3 Server lehnt Extensions ab

http
GET /ws HTTP/1.1
Host: simple.example.com
Sec-WebSocket-Extensions: permessage-deflate

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

Server akzeptiert WebSocket aber ohne Extensions, keine Sec-WebSocket-Extensions in Response. Messages werden uncompressed übertragen.

Extension Negotiation Flow

WebSocket Extension Negotiation Ablauf

Vorteile für die Systemarchitektur

  • Bandwidth Reduction: permessage-deflate kann JSON-Messages um 60-80% komprimieren, kritisch für Mobile-Networks und High-Volume-Streams
  • Flexible Negotiation: Server kann Extensions ablehnen bei Resource-Constraints, Client muss Fallback auf uncompressed unterstützen
  • Protocol Extensibility: Framework für Custom-Extensions ermöglicht Domain-Specific Optimizations ohne Core-Protocol-Änderungen

Spezifikation

RFC 7692 – Compression Extensions for WebSocket https://www.rfc-editor.org/rfc/rfc7692.html

Weitere Spezifikationen

Sec-WebSocket-Protocol Header, Sec-WebSocket-Accept Header