Caratteristiche e utilizzo dei WebSocket in informatica
Tra le novità portate da HTML5, i WebSocket rappresentano quella di maggior importanza dal punto di vista dell’interazione tra client e server. WebSocket è una tecnologia per effettuare comunicazioni bidirezionali in tempo reale. I WebSocket HTML5 rappresentano dunque un’evoluzione della comunicazione sul Web permettendo di utilizzare un canale di comunicazione bidirezionale full-duplex che opera attraverso un unico socket. In particolare, essi prevedono un canale di comunicazione sempre attivo, a bassa latenza, tra client e server, utilizzabile da entrambi sia in scrittura che in lettura. Tale canale è costituito da una connessione TCP persistente, garantito da un handshaking client-key iniziale ed un modello di sicurezza originbased. Per la protezione dei dati trasmessi contro lo sniffing sono applicate apposite maschere. Ecco le caratteristiche principali dei WebSocket:
- Bidirezionali. Quando il canale di comunicazione è attivo, sia il client che il server sono connessi ed entrambi possono inviare e ricevere messaggi.
- Full-duplex. Dati inviati contemporaneamente dai due attori (client e server) non generano collisioni e vengono ricevuti correttamente.
- Basati su TCP. Il protocollo usato a livello di rete per la comunicazione è il TCP, che garantisce un meccanismo affidabile (controllo degli errori, re-invio di pacchetti persi, ecc) per il trasporto di byte da una sorgente a una destinazione.
- Client-key handshake. All’apertura di una connessione, il client invia al server una chiave segreta di 16 byte codificata con base64. Il server aggiunge a questa un’altra stringa, detta magic string, specificata nel protocollo (“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”), codifica con SHA1 e invia il risultato al client. Cosi facendo, il client può verificare che l’identità del server che ha risposto corrisponda a quella desiderata.
- Sicurezza origin-based. Alla richiesta di una nuova connessione, il server può identificare l’origine della richiesta come non autorizzata o non attendibile e rifiutarla.
- Maschera dei dati. Nella trama iniziale di ogni messaggio, il client invia una maschera di 4 byte per l’offuscamento. Effettuando uno XOR bit a bit tra i dati trasmessi e la chiave è possibile ottenere il messaggio originale. Ciò è utile per evitare lo sniffing, cioè l’intercettazione di informazioni da parte di terze parti. L’utilizzo dei WebSocket lato client è possibile attraverso l’uso di specifiche API Javascript che consentono di ottenere informazioni sullo stato della connessione (aperta, chiusa, in apertura o in chiusura), di interagire con essa (inviare dati o chiudere la comunicazione) o di gestire particolari eventi come la ricezione di errori. Lato server, esistono implementazioni dei WebSocket per la maggior parte dei linguaggi più utilizzati (Node.js, Java, C#, Python, Ruby).
Le ragioni per usare i WebSocket sono molte:
- I WebSocket rendono la comunicazione in tempo reale molto più efficiente risparmiando in traffico di dati, utilizzo di CPU e in latenza.
- Rendono la comunicazione tra client e server molto più semplice. Mantenere aperta una connessione con i metodi di Push è molto difficile e laborioso, inoltre usare i metodi HTTP per casi limite aumenta drasticamente la complessità del codice, invece i WebSocket sono stati creati appositamente per questi scopi e sono stati progettati per semplificare tutto questo processo.
- I WebSocket non sono altro che un protocollo di rete che permette di costruire altri protocolli su di sè, questo permette di creare applicazioni più flessibili.