9. Extensions (Estensioni)
Il protocollo WebSocket fornisce un meccanismo di estensione che consente di aggiungere funzionalità aggiuntive.
9.1 Negotiating Extensions (Negoziazione delle estensioni)
Le estensioni vengono negoziate tramite l'intestazione Sec-WebSocket-Extensions durante l'handshake.
Il client richiede l'estensione
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
Risposta del server
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Extensions: permessage-deflate
Formato dell'estensione
extension = extension-token *( ";" extension-param )
extension-param = token [ "=" (token | quoted-string) ]
9.2 Known Extensions (Estensioni note)
permessage-deflate (RFC 7692)
L'estensione più comunemente utilizzata, che fornisce funzionalità di compressione dei messaggi.
Vantaggi:
- Riduce l'utilizzo della larghezza di banda
- Adatto per dati di testo
Svantaggi:
- Aumenta l'overhead della CPU
- Può aumentare la latenza
Esempio di utilizzo (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 // Comprimi solo messaggi superiori a 1KB
}
});
Altre estensioni
- permessage-bzip2: Compressione Bzip2
- multiplexing: Multiplexing (bozza)
- Estensioni personalizzate
Sviluppo di estensioni
Quando si sviluppano estensioni personalizzate:
- Definire il nome dell'estensione
- Definire i parametri
- Specificare come modificare la struttura del frame
- Implementare la negoziazione dell'handshake
- Registrare l'estensione
Link di riferimento
- Capitolo precedente: 8. Error Handling (Gestione degli errori)
- Capitolo successivo: 10. Security Considerations (Considerazioni sulla sicurezza)
- RFC 7692: Estensioni di compressione WebSocket