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 :
- Définir le nom de l'extension
- Définir les paramètres
- Spécifier comment modifier la structure de trame
- Implémenter la négociation de la poignée de main
- Enregistrer l'extension
Liens de référence
- Chapitre précédent : 8. Error Handling (Gestion des erreurs)
- Chapitre suivant : 10. Security Considerations (Considérations de sécurité)
- RFC 7692 : Extensions de compression WebSocket