WebSocket: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Aggiunta informazioni di handshake |
|||
Riga 6:
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 (browser)|Safari]] and [[Opera (browser)|Opera]].
== Handshake del protocollo ==
Per stabilire una connessione Websocket, il client invia una richiesta di [[handshake]] ed il server invia una risposta come indicato nell'esempio:
<source lang="text">
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
</source>
Risposta del server:
<source lang="text">
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
</source>
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, <code>\n<code> o <code>\r\n</code> e deve essere presente una linea bianca alla fine.
Il client invia un <code>Sec-WebSocket-Key</code> che è un valore casuale codificato con [[base64]]. Per generare un codice di risposta, il codice <code>258EAFA5-E914-47DA-95CA-C5AB0DC85B11</code> è concatenato con la chiave non codificata. Il risultato è codificato con [[SHA-1]] e successivamente con base64.
Infine, la stringa risultante viene inserita nella risposta con l'header <code>Sec-WebSocket-Accept</code>.
Dettagli per generare la chiave di risposta:
* <code>x3JJHMbDL1EzLkh9GBhXDw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11</code> codificata con SHA-1 restituisce il valore esadecimale 0x<code>1d29ab734b0c9585240069a6e4e3e91b61da1969</code>.
* Codificando questa stringa con base64 si ottiene il codice <code>HSmrc0sMlYUkAGmm5OPpG2HaGWk=</code>, 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.
{{Portale|Telematica|Web}}
|