Verkkoliitäntä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 17. maaliskuuta 2022 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .

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.

WebSocket-kanavan avaaminen

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.

Protokolla 75

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: esimerkki

Palvelimen 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: esimerkki

Vä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.

Protokolla 76

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[4U

Pyyntöö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:

  1. jätä pois merkkijonosta, jossa on Sec-WebSocket-Key1-pyynnön otsikon arvo, kaikki merkit, jotka eivät ole numeroita (jotka eivät kuulu alueelle '0'...'9');
  2. muuta tuloksena oleva merkkijono 64-bittiseksi kokonaisluvuksi (yllä olevassa esimerkissä saamme 1299853100);
  3. jaa saatu luku kokonaislukujaolla välilyöntien määrällä lähderivillä otsikon arvon kanssa;
  4. edustaa saatua numeroa 4-tavuisena 32-bittisenä numerona big endian -muodossa : korkea tavu on tallennettu nollasiirtymään;
  5. tee sama Sec-WebSocket-Key2-otsikon kanssa;
  6. tulkitsemalla kohtien 4) ja 5) numerot 4-tavuisiksi merkkijonoiksi, yhdistä ne (lisää ne yhdeksi merkkijonoksi) ja lisää pyynnön runko merkkijonona;
  7. laske MD5 -arvo vastaanotetusta 16-tavuisesta merkkijonosta ja kirjoita tämä arvo vastauksen runkoon "sellaisenaan" muuntamatta mihinkään esitykseen;

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.

Protokolla 07

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:

  • onko viesti hajanainen;
  • lähetetyn tiedon tyyppi;
  • oliko viesti peitetty;
  • tiedon koko;
  • naamio;
  • muut ohjaustiedot (ping, pong...).

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: 7

Palvelimen 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: chat

Vastaus 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:

  1. ota merkkijonon arvo Sec-WebSocket-Key-otsikosta ja ketjuta se merkkijonoon 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 (edellä olevassa esimerkissä saamme dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-4C5-47DA-95CA-C5AB0DC85B11)
  2. laske SHA-1-binäärihajautus (20 merkin binäärimerkkijono) ensimmäisessä kappaleessa vastaanotetusta merkkijonosta
  3. koodaa tiiviste Base64 : ssä (s3pPLMBiTxaQ9kYGzzhZRbK+xOo=)

Esimerkki yllä olevan algoritmin toteutuksesta PHP :ssä :

<?php echo base64_encode ( SHA1 ( "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" , tosi )); ?>

Protokolla RFC 6455 (tästä eteenpäin data välitetään kehyksissä tätä protokollaa käyttäen)

11. joulukuuta 2011 protokolla sai RFC -tilan .

Sec-WebSocket-Origin- otsikko on nyt vain Origin .

URI-skeema

Web Socket -protokolla määrittää kaksi URI -mallia , ws: (salaamaton yhteys) ja wss: (salattu yhteys).

WebSocket-toteutus selaimissa

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).

Muistiinpanot

  1. WebSocket-protokolla (draft-hixie-thewebsocketprotocol-76) . Haettu 20. syyskuuta 2011. Arkistoitu alkuperäisestä 19. huhtikuuta 2012.
  2. WebSocket-protokolla (draft-ietf-hybi-thewebsocketprotocol-07) . Haettu 20. syyskuuta 2011. Arkistoitu alkuperäisestä 19. huhtikuuta 2012.
  3. Shestakov V. S., Sagidullin A. S. / WEBSOCKET TEKNOLOGIAN SOVELTAMINEN TEKNOLOGILISISSA WEBSOVELLUKSESSA. — DOI 10.17586/0021-3454-2015-58-4-328-330 UDC 658.512.011.56. - Zh-l Instrumentation huhtikuu 2015

Linkit