WebSocket

Da Wikipedia, l'enciclopedia libera.

WebSocket è una tecnologia web che fornisce canali di comunicazione full-duplex attraverso una singola connessione TCP. L'API del WebSocket è stata standardizzata dal W3C e il protocollo WebSocket è stato standardizzato dall'IETF come RFC 6455.

WebSocket è disegnato per essere implementato sia lato browser che lato server, ma può essere utilizzato anche da qualsiasi applicazione client-server. Il protocollo è un'implementazione basata sul protocollo TCP. La sua unica correlazione con l'HTTP è nel modo in cui fa l'handshake durante una Upgrade request tra server. Il protocollo WebSocket permette maggiore interazione tra un browser e un server, facilitando la realizzazione di applicazioni che forniscono contenuti e giochi in tempo reale. Questo è reso possibile fornendo un modo standard per il server di mandare contenuti al browser senza dover essere sollecitato dal client e permettendo ai messaggi di andare e venire tenendo la connessione aperta.

In aggiunta, le comunicazioni sono fatte attraverso la porta TCP 80, che è un vantaggio per quegli ambienti che bloccano porte non standard utilizzando dei firewall. Il protocollo WebSocket è supportato attualmente da numerosi browser, incluso Google Chrome, Internet Explorer, Firefox, Safari e Opera.

Handshake del protocollo[modifica | modifica wikitesto]

Per stabilire una connessione Websocket, il client invia una richiesta di handshake ed il server invia una risposta come indicato nell'esempio:

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com

Risposta del server:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

L'handshake ricorda l'implementazione HTTP così il server può gestirla come una normale richiesta di connessione sulla stessa porta. All'interno della richiesta vengono specificati degli opportuni campi che identificano una richiesta Websocket.

Ognuna delle linee termina con un EOL, \n o \r\n e deve essere presente una linea bianca alla fine.

Il client invia un Sec-WebSocket-Key che è un valore casuale codificato con base64. Per generare un codice di risposta, il codice 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 è concatenato alla chiave ricevuta, che non viene decodificata. Il risultato è codificato con SHA-1 e successivamente con base64. Infine, la stringa risultante viene inserita nella risposta con l'header Sec-WebSocket-Accept.

Dettagli per generare la chiave di risposta:

  • x3JJHMbDL1EzLkh9GBhXDw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11 codificata con SHA-1 restituisce il valore esadecimale 0x1d29ab734b0c9585240069a6e4e3e91b61da1969.
  • Codificando questa stringa con base64 si ottiene il codice HSmrc0sMlYUkAGmm5OPpG2HaGWk=, che è il valore inserito nella risposta.

Quando viene stabilita la connessione, il client ed il server possono inviare dati tramite il Websocket in entrambe le direzioni.

Estensioni sperimentali[modifica | modifica wikitesto]

Google Chrome ha un'opzione a riga di comando (--enable-websocket-over-spdy) che permette di abilitare una versione sperimentale di Websocket over SPDY.[1]

Sviluppo[modifica | modifica wikitesto]

Utilizzando il Google Chrome Developer Tools, lo sviluppatore può controllare l'handshake ed i pacchetti che vengono scambiati nel canale.[2]

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

  1. ^ List of Chromium Command Line Switches, Peter.sh. URL consultato il 10 dicembre 2011.
  2. ^ Vanessa Wang, Frank Salim e Peter Moskovits, APPENDIX A: WebSocket Frame Inspection with Google Chrome Developer Tools in The Definitive Guide to HTML5 WebSocket, Apress, febbraio 2013, ISBN 978-1-4302-4740-1. URL consultato il 07 aprile 2013.