Webes aljzat

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. március 17-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

A WebSocket  egy TCP -kapcsolaton keresztüli kommunikációs protokoll, amelyet állandó kapcsolaton keresztül a böngésző és a webszerver közötti üzenetváltásra terveztek.

A W3C jelenleg szabványosítja a Web Sockets API-t. A protokoll szabványtervezetét az IETF jóváhagyta .

A WebSocket webböngészőkben és webszerverekben való megvalósításra készült, de bármely kliens- vagy szerveralkalmazáshoz használható. A WebSocket protokoll a TCP protokollon alapuló független protokoll. Szorosabb interakciót tesz lehetővé a böngésző és a weboldal között, megkönnyítve az interaktív tartalmak terjesztését és a valós idejű alkalmazások létrehozását.

WebSocket csatorna megnyitása

Az ügyfél és a kiszolgáló a HTTP -hez hasonló protokollt használ a WebSocket kapcsolat létrehozásához . A kliens egy speciális HTTP kérést generál, amelyre a szerver meghatározott módon válaszol.

75. jegyzőkönyv

A 75. számú protokolltervezet 2010. június 8-án kelt, a Wayback Machine -nál történt archív példányának felülvizsgálata előtt a WebSocket kapcsolat az alábbiak szerint jött létre. Ügyfél kérése:

GET /demo HTTP/1.1 Frissítés: WebSocket Csatlakozás: Frissítés host: example.com Származási hely: http://example.com WebSocket Protokoll: minta

Szerver válasza, amely megerősíti a WebSocketre váltást:

HTTP/1.1 101 Web Socket Protocol Handshake Frissítés: WebSocket Csatlakozás: Frissítés WebSocket-Origin: http://example.com WebSocket helye: ws://example.com/demo WebSocket Protokoll: minta

A válasz elküldése után a WebSocket kapcsolat azonnal létrejöttnek minősül, a kliens és a szerver megkezdheti a kétirányú üzenetküldést ugyanazon a TCP - kapcsolaton keresztül. Szöveges üzenet küldéséhez ( UTF-8 kódolásban ) egy null byte-ot kell küldenie előtte, és utána egy 255 értékű bájtot.

76. jegyzőkönyv

2010. június 2-án módosították a WebSocket protokollt, amely megváltoztatta a WebSocket kapcsolat létrehozásának eljárását a visszamenőleges kompatibilitás fenntartása nélkül. 76 - nál Archiválva : 2012. április 19. A WebSocket protokoll felülvizsgálatának tervezete védelmet nyújtott a hamisított kérések ellen. Az új sémát támogató ügyfél a következő kérést küldi:

GET /demo HTTP/1.1 Frissítés: WebSocket Csatlakozás: Frissítés Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5 host: example.com Sec-WebSocket-Key1: 12998 5 Y3 1 .P00 Származási hely: http://example.com WebSocket Protokoll: minta ^n:ds[4U

A kérelemhez új "Sec-WebSocket-Key1" és "Sec-WebSocket-Key2" fejlécek és egy 8 bájtos kéréstörzs került. Mindegyiket véletlenszerűen generálja az ügyfél.

Szerver válasza, amely megerősíti a WebSocketre váltást:

HTTP/1.1 101 Web Socket Protocol Handshake Frissítés: WebSocket Csatlakozás: Frissítés Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo Sec-WebSocket-Protocol: minta 8jKS'y:G*Co,Wxa-

A válasz új fejlécneveket tartalmaz ("Sec-WebSocket-Origin", "Sec-WebSocket-Location", "Sec-WebSocket-Protocol" a "WebSocket-Origin", "WebSocket-Location", "WebSocket-Protocol" helyett) és 16 bájtos választörzs, a következőképpen értékelve:

  1. a Sec-WebSocket-Key1 kérésfejléc értékét tartalmazó karakterláncból zárjon ki minden olyan karaktert, amely nem számjegy (nem esik a '0'...'9' tartományba);
  2. a kapott karakterláncot 64 bites egész számmá alakítjuk (a fenti példában 1299853100-at kapunk);
  3. a kapott számot egész számmal osszuk el a fejléc értékét tartalmazó forrássorban lévő szóközök számával;
  4. ábrázolja a kapott számot 4 bájtos 32 bites számként a big endian formátumban : a magas bájt a nulla eltolásnál van tárolva;
  5. tegye ugyanezt a Sec-WebSocket-Key2 fejléccel;
  6. a 4) és 5) pontból származó számokat 4 bájtos karakterláncként értelmezve, összefűzve (egy sztringbe adva) és a kérés törzsét karakterláncként hozzáadva;
  7. számítsa ki az MD5 értéket a kapott 16 bájtos karakterláncból , és írja be ezt az értéket a választörzsbe "ahogy van", anélkül, hogy bármilyen reprezentációra konvertálná;

Megjegyzések.

Annak ellenére, hogy az új kérések és válaszok a HTTP-protokoll kéréseire és válaszaira "hasonlóak", nem. Például a kérésnek van törzse, de a „Tartalom hossza” mező hiányzik a fejlécekből (ami sérti a HTTP -konvenciókat ).

A háttérrendszernek támogatnia KELL mindkét típusú klienst, és különbséget KELL tenni közöttük a Sec-WebSocket-Key1 és a Sec-WebSocket-Key2 fejlécek megléte vagy hiánya alapján a kérésben.

07. jegyzőkönyv

A 07-es verzióhoz Archiválva : 2012. április 19. 2011. április 22-én kelt jegyzőkönyv-tervezetet módosították.

A 76-os protokolltól eltérően, amely szerint az adatok továbbítása titkosítás nélkül [1] történik, a klienstől (böngészőtől) a szerverhez továbbított adatok minden egyes bájtja a protokoll ezen verziójában szükségszerűen 4 bájtos maszkkal van maszkolva [2] . Minden üzenethez újból jön létre.

A most elküldött üzenetnek van egy fejléce, amely olyan adatokat tartalmaz, mint:

  • hogy az üzenet töredezett-e;
  • a továbbított adatok típusa;
  • hogy az üzenetet elfedték-e;
  • adatméret;
  • maszk;
  • egyéb vezérlő adatok (ping, pong...).

A kliens és a szerver közötti interakció a kliens kérésével kezdődik:

Szerezze be a /chat HTTP/1.1-et Gazda: server.example.com Frissítés: websocket Csatlakozás: Frissítés Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: chat, szupercsevegés Sec-WebSocket-verzió: 7

A szerver válasza így néz ki:

HTTP/1.1 101 Switching Protocols Frissítés: websocket Csatlakozás: Frissítés Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat

A válasz egy Sec-WebSocket-Protocol fejlécet tartalmaz, amely egyetlen, a szerver által kiválasztott protokollt (csevegés) tartalmaz az ügyfél által támogatott összes (csevegés, szupercsevegés) közül. A Sec-WebSocket-Accept fejléc a következőképpen alakul:

  1. vegyük ki a karakterlánc értékét a Sec-WebSocket-Key fejlécből, és fűzzük össze a 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 karakterlánccal (a fenti példában dGhlIHNhbXBsZSBub25jZQ==258EAFA5-4CAB15-4CAB15-47DA-95CA-C5AB0DC85B11)
  2. számítsa ki az SHA-1 bináris hash-t (20 karakteres bináris karakterlánc) az első bekezdésben kapott karakterláncból
  3. kódolja a hash-t a Base64 -ben (s3pPLMBiTxaQ9kYGzzhZRbK+xOo=)

Példa a fenti algoritmus megvalósítására PHP -ben :

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

RFC 6455 protokoll (a továbbiakban az adatok átvitele keretekben történik ezzel a protokollal)

2011. december 11-én a protokoll RFC státuszt kapott .

A Sec-WebSocket-Origin fejléc mostantól csak Origin .

URI-séma

A Web Socket protokoll két URI -sémát határoz meg : ws: (titkosítatlan kapcsolat) és wss: (titkosított kapcsolat).

WebSocket megvalósítás a böngészőkben

A kapcsolat létrehozásához az ügyfélszkript létrehoz egy WebSocket objektumot, átadja a WebSocket URI paramétert a konstruktorának, és meghatározza a visszahívási funkciókat a csatlakozáshoz, az üzenet fogadásához és a leválasztáshoz.

< html > < fej > < script > const webSocket = new WebSocket ( 'ws://localhost/echo' ); webSocket . onopen = esemény => { alert ( 'onopen' ); webSocket . küld ( "Hello Web Socket!" ); }; webSocket . onmessage = event => { alert ( 'onmessage, ' + event . data ); }; webSocket . onclose = esemény => { alert ( 'onclose' ); }; </ script > </ head > < body > </ body > </ html >

A WebSocket jelenleg a következő böngészőkben támogatott:

A következő linken ellenőrizheti, hogy böngészője támogatja-e a WebSocket szolgáltatást: http://caniuse.com/#feat=websockets Archiválva : 2017. április 8. a Wayback Machine -nél .

2010. november végén Adam Barth publikálta az alkalmazott protokoll megbízhatóságáról szóló tanulmány eredményeit [3] . Eredményei alapján kiderült, hogy transzparens proxyszerverek használata esetén lehetőség van a továbbított adatok gyorsítótárának cseréjére, így a felhasználók valós adatok helyett egy verziót kapnak az adatokból a támadótól. A probléma elég komolynak bizonyult ahhoz, hogy a Firefox és az Opera fejlesztői a 2011. január 11-én archivált Wayback Machine -n bejelentették , hogy a böngészőik jövőbeni verzióiban alapértelmezés szerint le lesz tiltva a webaljzatok támogatása mindaddig, amíg a protokoll bizonytalanságát ki nem javítják ( bár továbbra is lehetséges bekapcsolni őket).

Jegyzetek

  1. A WebSocket protokoll (draft-hixie-thewebsocketprotocol-76) . Letöltve: 2011. szeptember 20. Az eredetiből archiválva : 2012. április 19..
  2. A WebSocket protokoll (draft-ietf-hybi-thewebsocketprotocol-07) . Letöltve: 2011. szeptember 20. Az eredetiből archiválva : 2012. április 19..
  3. Shestakov V. S., Sagidullin A. S. / APPLICATION OF WEBSOCKET TECHNOLOGY IN TECHNOLOGICAL WEB APPLICATIONS. — DOI 10.17586/0021-3454-2015-58-4-328-330 UDC 658.512.011.56. — Zh-l Instrumentation 2015. április

Linkek