WebSocket: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m +wikilink
Nessun oggetto della modifica
Riga 72:
 
== Handshake del protocollo ==
Per stabilire una connessione WebsocketWebSocket, il client invia una richiesta di [[handshake]] ede il server invia una risposta come indicato nell'esempio<ref>{{Cite IETF|title=RFC 6455 The WebSocket Protocol|publisher=[[Internet Engineering Task Force|IETF]]|section=1.2|sectionname=Protocol Overview|rfc=6455|date=December 2011|author1=Ian Fette|author2=Alexey Melnikov}}</ref>.
 
Richiesta del client:
Riga 95:
</syntaxhighlight>
 
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 WebsocketWebSocket.
 
Ognuna delle linee termina con un EOL, <code>\n</code> o <code>\r\n</code> e deve essere presente una linea vuota 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 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 <code>Sec-WebSocket-Accept</code>.
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 <code>0x1d29ab734b0c9585240069a6e4e3e91b61da1969</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 WebsocketWebSocket in entrambe le direzioni<ref>{{Cita web|url=https://trac.tools.ietf.org/wg/hybi/trac/wiki/FAQ|titolo=Main Goal of WebSocket protocol|editore=IETF|accesso=25 luglio 2015|citazione=The computation [...] is meant to prevent a caching intermediary from providing a WS-client with a cached WS-server reply without actual interaction with the WS-server.}}</ref><ref>{{Cite IETF|title=RFC 6455 The WebSocket Protocol|page=8|publisher=[[Internet Engineering Task Force|IETF]]|section=1.3|sectionname=Opening Handshake|rfc=6455|date=December 2011|author1=Ian Fette|author2=Alexey Melnikov}}</ref><ref>{{Cite IETF|title=RFC 6455 The WebSocket Protocol|publisher=[[Internet Engineering Task Force|IETF]]|section=5.2|sectionname=Base Framing Protocol|rfc=6455|date=December 2011|author1=Ian Fette|author2=Alexey Melnikov}}</ref><ref>{{cite IETF|draft=draft-ietf-hybi-websocket-multiplexing|title=A Multiplexing Extension for WebSockets|author1=John A. Tamplin|author2=Takeshi Yoshino|publisher=[[Internet Engineering Task Force|IETF]]|year=2013}}</ref>.
 
== Estensioni sperimentali ==
Google Chrome ha un'opzione a riga di comando (<code>--enable-websocket-over-spdy</code>) che permette di abilitare una versione sperimentale dei WebsocketWebSocket veicolati dal protocollo [[SPDY]].<ref>{{Cita web|url=http://peter.sh/experiments/chromium-command-line-switches/ |titolo=List of Chromium Command Line Switches |editore=Peter.sh |data= |accesso=10 dicembre 2011}}</ref>
 
== Sviluppo ==