Aller au contenu principal

9. Extensions

Le protocole WebSocket fournit un mécanisme d'extension permettant d'ajouter des fonctionnalités supplémentaires.

9.1 Negotiating Extensions (Négociation des extensions)

Les extensions sont négociées via l'en-tête Sec-WebSocket-Extensions lors de la poignée de main.

Demande d'extension par le client

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Réponse du serveur

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

Format d'extension

extension = extension-token *( ";" extension-param )
extension-param = token [ "=" (token | quoted-string) ]

9.2 Known Extensions (Extensions connues)

permessage-deflate (RFC 7692)

L'extension la plus couramment utilisée, fournissant une fonctionnalité de compression de messages.

Avantages :

  • Réduit l'utilisation de la bande passante
  • Convient aux données texte

Inconvénients :

  • Augmente la charge CPU
  • Peut augmenter la latence

Exemple d'utilisation (Node.js) :

const WebSocket = require('ws');

const wss = new WebSocket.Server({
port: 8080,
perMessageDeflate: {
zlibDeflateOptions: {
chunkSize: 1024,
memLevel: 7,
level: 3
},
zlibInflateOptions: {
chunkSize: 10 * 1024
},
clientNoContextTakeover: true,
serverNoContextTakeover: true,
serverMaxWindowBits: 10,
concurrencyLimit: 10,
threshold: 1024 // Compresser uniquement les messages supérieurs à 1KB
}
});

Autres extensions

  • permessage-bzip2 : Compression Bzip2
  • multiplexing : Multiplexage (brouillon)
  • Extensions personnalisées

Développement d'extensions

Lors du développement d'extensions personnalisées :

  1. Définir le nom de l'extension
  2. Définir les paramètres
  3. Spécifier comment modifier la structure de trame
  4. Implémenter la négociation de la poignée de main
  5. Enregistrer l'extension

Liens de référence