WebSocket on TCP -yhteyden ylittävä viestintäprotokolla, joka on suunniteltu vaihtamaan viestejä selaimen ja verkkopalvelimen välillä käyttämällä jatkuvaa yhteyttä.
W3C standardoi parhaillaan Web Sockets API:ta. IETF on hyväksynyt tämän protokollan standardiluonnoksen .
WebSocket on suunniteltu käytettäväksi verkkoselaimissa ja -palvelimissa, mutta sitä voidaan käyttää missä tahansa asiakas- tai palvelinsovelluksessa. WebSocket-protokolla on itsenäinen protokolla, joka perustuu TCP-protokollaan. Se mahdollistaa tiiviimmän vuorovaikutuksen selaimen ja verkkosivuston välillä, mikä helpottaa interaktiivisen sisällön jakelua ja reaaliaikaisten sovellusten luomista.
Asiakas ja palvelin käyttävät HTTP :n kaltaista protokollaa WebSocket-yhteyden muodostamiseen . Asiakas luo erityisen HTTP-pyynnön, johon palvelin vastaa tietyllä tavalla.
Ennen 8.6.2010 päivätyn protokollaluonnoksen numero 75 arkistokopion tarkistamista Wayback Machinessa , mukaan lukien, WebSocket-yhteys muodostettiin seuraavasti. Asiakaspyyntö:
HANKI /demo HTTP/1.1 Päivitys: WebSocket Yhteys: Päivitä isäntä: example.com Alkuperä: http://example.com WebSocket Protocol: esimerkkiPalvelimen vastaus, joka vahvistaa siirtymisen WebSocketiin:
HTTP/1.1 101 Web Socket Protocol Handshake Päivitys: WebSocket Yhteys: Päivitä WebSocket-Origin: http://example.com WebSocketin sijainti: ws://example.com/demo WebSocket Protocol: esimerkkiVälittömästi vastauksen lähettämisen jälkeen WebSocket-yhteys katsotaan muodostuneeksi, asiakas ja palvelin voivat aloittaa kaksisuuntaisen viestinnän saman TCP - yhteyden kautta. Jotta voit lähettää tekstiviestin ( UTF-8- koodauksella ), sinun on lähetettävä tyhjä tavu ennen sitä ja sen jälkeen tavu arvolla 255.
2. kesäkuuta 2010 WebSocket-protokollaa muutettiin siten, että WebSocket-yhteyden muodostamismenettelyä muutettiin säilyttämättä taaksepäin yhteensopivuutta. Numero 76 Arkistoitu 19. huhtikuuta 2012. WebSocket-protokollan tarkistusluonnos lisäsi suojan väärennettyjä pyyntöjä vastaan. Uutta skeemaa tukeva asiakas lähettää seuraavan pyynnön:
HANKI /demo HTTP/1.1 Päivitys: WebSocket Yhteys: Päivitä Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5 isäntä: example.com Sec-WebSocket-Key1: 12998 5 Y3 1 .P00 Alkuperä: http://example.com WebSocket Protocol: esimerkki ^n:ds[4UPyyntöön on lisätty uudet "Sec-WebSocket-Key1"- ja "Sec-WebSocket-Key2"-otsikot sekä 8-tavuinen pyynnön runko. Kaikki ne ovat asiakkaan luomia satunnaisesti.
Palvelimen vastaus, joka vahvistaa siirtymisen WebSocketiin:
HTTP/1.1 101 Web Socket Protocol Handshake Päivitys: WebSocket Yhteys: Päivitä Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo Sec-WebSocket-Protocol: esimerkki 8jKS'y:G*Co,Wxa-Vastaus sisältää uusia otsikon nimiä ("Sec-WebSocket-Origin", "Sec-WebSocket-Location", "Sec-WebSocket-Protocol" eikä "WebSocket-Origin", "WebSocket-Location", "WebSocket-Protocol") ja 16-tavuinen vastausteksti, arvioituna seuraavasti:
Huomautuksia.
Huolimatta uusien pyyntöjen ja vastausten "samankaltaisuudesta" HTTP-protokollan pyyntöihin ja vastauksiin , ne eivät ole. Pyynnöllä on esimerkiksi tekstiosa, mutta otsikoista puuttuu "Content-Length" -kenttä (mikä rikkoo HTTP -käytäntöjä ).
Taustajärjestelmän PITÄÄ tukea molempia asiakkaita ja erottaa ne toisistaan sen perusteella, onko pyynnössä Sec-WebSocket-Key1- ja Sec-WebSocket-Key2-otsikoita.
Versioon 07 Arkistoitu 19. huhtikuuta 2012. 22. huhtikuuta 2011 päivättyä pöytäkirjaluonnosta muutettiin.
Toisin kuin protokolla 76, jonka mukaan tiedot siirretään ilman salausta [1] , jokainen asiakkaalta (selaimelta) palvelimelle lähetetty datatavu tässä protokollaversiossa on välttämättä peitetty 4-tavuisella maskilla [2] . Se luodaan jokaiselle viestille uudelleen.
Nyt lähetettävässä viestissä on otsikko, joka sisältää tietoja, kuten:
Asiakkaan ja palvelimen välinen vuorovaikutus alkaa asiakkaan pyynnöstä:
HANKI /chat HTTP/1.1 Isäntä: server.example.com Päivitys: websocket Yhteys: Päivitä Sec-WebSocket-avain: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-versio: 7Palvelimen vastaus näyttää tältä:
HTTP/1.1 101 Switching Protocols Päivitys: websocket Yhteys: Päivitä Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chatVastaus sisältää Sec-WebSocket-Protocol-otsikon, jossa on yksi protokolla, jonka palvelin valitsee (chat) kaikista asiakkaan tukemista (chat, superchat). Sec-WebSocket-Accept-otsikko muodostetaan seuraavasti:
Esimerkki yllä olevan algoritmin toteutuksesta PHP :ssä :
<?php echo base64_encode ( SHA1 ( "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" , tosi )); ?>11. joulukuuta 2011 protokolla sai RFC -tilan .
Sec-WebSocket-Origin- otsikko on nyt vain Origin .
Web Socket -protokolla määrittää kaksi URI -mallia , ws: (salaamaton yhteys) ja wss: (salattu yhteys).
Yhteyden muodostamiseksi asiakaskomentosarja luo WebSocket-objektin, välittää WebSocket URI -parametrin rakentajalleen ja määrittää takaisinsoittotoiminnot yhteyden muodostamista, viestin vastaanottamista ja yhteyden katkaisemista varten.
< html > < head > < script > const webSocket = uusi WebSocket ( 'ws://localhost/echo' ); webSocket . onopen = tapahtuma => { hälytys ( 'onopen' ); webSocket . lähetä ( "Hei Web Socket!" ); }; webSocket . onmessage = tapahtuma => { hälytys ( 'onmessage, ' + tapahtuma . data ); }; webSocket . onclose = tapahtuma => { hälytys ( 'onclose' ); }; </ script > </ head > < body > </ body > </ html >WebSocket on tällä hetkellä tuettu seuraavissa selaimissa:
Voit tarkistaa, tukeeko selaimesi WebSocketia, seuraamalla linkkiä: http://caniuse.com/#feat=websockets Arkistoitu 8. huhtikuuta 2017 Wayback Machinessa .
Adam Barth julkaisi marraskuun 2010 lopussa käytetyn protokollan luotettavuutta koskevan tutkimuksen tulokset [3] . Sen tulosten mukaan kävi ilmi, että läpinäkyviä välityspalvelimia käytettäessä on mahdollista korvata lähetettyjen tietojen välimuisti siten, että käyttäjät saavat todellisen tiedon sijaan version tiedoista hyökkääjältä. Ongelma osoittautui niin vakavaksi, että Firefoxin ja Operan kehittäjät ilmoittivat Wayback Machinessa Arkistoitu 11. tammikuuta 2011 , että heidän selaimensa tulevissa versioissa verkkopistokkeiden tuki poistetaan oletusarvoisesti käytöstä, kunnes tämän protokollan epävarmuus on korjattu ( vaikka on edelleen mahdollista kytkeä ne päälle).