WebSocket

Z Wikipedie, otevřené encyklopedie

WebSocket je počítačový komunikační protokol, poskytující plně duplexní (obousměrný) komunikační kanál přes jediné TCP připojení. Protokol WebSocket byl standardizován komisí IETF jako RFC 6455 v roce 2011, a WebSocket API ve Webové IDL bylo standardizováno konsorciem W3C.

WebSocket je navržen tak, aby mohl být prováděn ve webových prohlížečích a na webových serverech, ale může být použita jakákoliv klientská a serverová aplikace. WebSocket je nezávislý protokol založený na základě TCP. Jeho jediný vztah k HTTP je, že jeho handshake (navázání spojení) je interpretováno HTTP servery jako požadavek na upgrade.[1] Protokol WebSocket umožňuje interakci mezi prohlížečem a webovým serverem s nižší režií, usnadňuje real-time přenos dat ze serveru a na server. To je možné proto, že poskytuje standardizovaný způsob pro odeslání obsahu ze serveru do prohlížeče, aniž by to bylo na požadavek klienta (jako v případě AJAXu), a umožňuje předání zpráv tam i zpět, zatímco je udržováno otevřené spojení. Tímto způsobem může probíhat obousměrná (bi‑directional) komunikace mezi prohlížečem a serverem. Tato komunikace probíhá přes TCP port číslo 80 (nebo 443 v případě TLS-šifrovaných spojení), což je výhoda pro ta prostředí, kde jsou newebová připojení k Internetu blokována firewallem. Podobně obousměrné komunikace prohlížeč-server bylo dosahováno nestandardizovanými způsoby používajícími provizorní technologie, jako je Comet.

Protokol WebSocket, je v současné době podporován ve většině hlavních prohlížečů, včetně Google Chrome, Microsoft Edge, MS Internet Exploreru, Firefoxu, Safari a Opeře. WebSocket však vyžaduje podporu také na straně serveru, nejen klienta (prohlížeče) a jeho JavaScriptu.

Přehled[editovat | editovat zdroj]

Na rozdíl od HTTP, WebSocket umožňuje obousměrnou komunikaci.[2][3] Navíc, WebSocket umožňuje proudy zpráv na základě TCP. Vlastní TCP se zabývá proudy bajtů a ne vlastním konceptem zpráv. Před příchodem WebSocketu, byla obousměrná komunikace na portu 80 dosažitelná pomocí kanálů Comet; nicméně její realizace byla netriviální a vzhledem k režii TCP handshake a HTTP záhlaví nad sebou, je neefektivní pro malé zprávy. WebSocket protokol si klade za cíl řešit tyto problémy, bez ohrožení bezpečnostních předpokladů webu.

Protokol WebSocket specifikace definuje ws a wss jako dvě nové uniform resource identifier (URI) systémů,[4] které jsou používány pro nešifrované a případně šifrované spojení. Na rozdíl od režimu jméno a fragment (# není podporován), zbytek URI komponenty je definován pomocí obecné syntaxe URI.[5]

Pomocí prohlížeče Developer Tools, vývojáři mohou kontrolovat navazování spojení WebSocketu, stejně jako jeho rámců.[6]

Bezpečnostní aspekty[editovat | editovat zdroj]

Na rozdíl od běžných požadavků HTTP mezi doménami nejsou požadavky WebSocket omezeny zásadou stejného původu. Servery WebSocket proto musí během navazování připojení ověřit hlavičku „Origin“ proti očekávaným zdrojům, aby se vyhnuly útokům únosu WebSocket mezi weby (podobně jako padělání požadavků mezi weby), které by mohly být možné, když je připojení ověřeno pomocí souborů cookie nebo HTTP autentizace. Je lepší použít tokeny nebo podobné ochranné mechanismy k ověření připojení WebSocket, když jsou přes WebSocket přenášena citlivá (soukromá) data.[7] Živý příklad zranitelnosti byl viděn v roce 2020 v podobě Cable Haunt.

Implementace v prohlížečích[editovat | editovat zdroj]

Zabezpečená verze protokolu WebSocket je implementována ve Firefoxu 6,[8] Safari 6, Google Chrome 14,[9] Opeře 12.10 a Internet Exploreru 10.[10] Podrobná zpráva z testů protokolu[11] uvádí shodu těchto prohlížečů na jeho konkrétní aspekty.

Starší, méně bezpečná verze protokolu byla realizována v Opeře 11 a Safari 5, stejně jako v mobilní verzi Safari v iOS 4.2.[12] BlackBerry prohlížeč v OS7 implementuje protokol WebSocket.[13] Z důvodu chyby v návrhu byl zakázán ve Firefoxu 4 a 5,[14] jakož i v Opeře 11.[15]

K dispozici je také přepínač příkazového řádku --enable-websocket-nad-spdy pro Google Chrome, které umožňuje používat rané experimentální implementace WebSocketu přes SPDY.[16]

stav
protokol,
verze
datum návrhu
 
Internet Explorer
 
Firefox[17]
(PC)
Firefox
(Android)
Chrome
(PC, přenosné)
Safari
(Mac, iOS)
Opera
(PC, přenosné)
Android Browser
 
hixie-75 4. února 2010 4 5.0.0
hixie-76
hybi-00
6. května 2010
23. května 2010
4.0 (vypnuto) 6 5.0.1 11.00 (vypnuto)
hybi-07, v7 22. dubna 2011 6[18] requiring extra code to integrate with existing WebSocket-enabled code.
hybi-10, v8 11. července 2011 7[19] 7 14[20]
rfc:6455, v13 prosinec 2011 10[21] 11 11 16[22] 6 12.10[23] 4.4

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku WebSocket na anglické Wikipedii.

  1. FETTE, Ian; MELNIKOV, Alexey. RFC 6455 The WebSocket Protocol [online]. IETF, prosinec 2011. Kapitola 1.7. 
  2. Glossary:WebSockets [online]. Mozilla Developer Network, 2015. Dostupné online. (anglicky) 
  3. HTML5 WebSocket: A Quantum Leap in Scalability for the Web. www.websocket.org [online]. [cit. 2017-06-13]. Dostupné v archivu pořízeném dne 2021-04-01. 
  4. IANA Uniform Resource Identifer (URI) Schemes [online]. Internet Assigned Numbers Authority, 2011-11-14 [cit. 2011-12-10]. Dostupné online. (anglicky) 
  5. Ian Fette; Alexey Melnikov (December 2011).
  6. WANG, Vanessa; SALIM, Frank; MOSKOVITS, Peter. The Definitive Guide to HTML5 WebSocket. [s.l.]: Apress, February 2013. Dostupné v archivu pořízeném dne 2015-12-31. ISBN 978-1-4302-4740-1. Kapitola APPENDIX A: WebSocket Frame Inspection with Google Chrome Developer Tools.  Archivováno 31. 12. 2015 na Wayback Machine.
  7. MEI, Wenbo; LONG, Zhaohua. Research and Defense of Cross-Site WebSocket Hijacking Vulnerability. In: 2020 IEEE International Conference on Artificial Intelligence and Computer Applications (ICAICA). [s.l.]: IEEE, 2020-06. Dostupné online. DOI 10.1109/icaica50127.2020.9182458.
  8. Dirkjan Ochtman. WebSocket enabled in Firefox 6 [online]. May 27, 2011 [cit. 2011-06-30]. Dostupné v archivu pořízeném dne 2012-05-26. (anglicky) 
  9. Chromium Web Platform Status [online]. [cit. 2011-08-03]. Dostupné online. (anglicky) 
  10. WebSockets (Windows) [online]. Microsoft, 2012-09-28 [cit. 2012-11-07]. Dostupné online. (anglicky) 
  11. WebSockets Protocol Test Report [online]. Tavendo.de, 2011-10-27 [cit. 2011-12-10]. Dostupné v archivu pořízeném dne 2012-04-19. (anglicky) 
  12. Katie Marsal. Apple adds accelerometer, WebSockets support to Safari in iOS 4.2 [online]. November 23, 2010 [cit. 2011-05-09]. Dostupné online. (anglicky) 
  13. Web Sockets API [online]. BlackBerry [cit. 2011-07-08]. Dostupné v archivu pořízeném dne June 10, 2011. (anglicky) 
  14. Chris Heilmann. WebSocket disabled in Firefox 4 [online]. December 8, 2010 [cit. 2011-05-09]. Dostupné online. (anglicky) 
  15. Aleksander Aas. Regarding WebSocket [online]. December 10, 2010 [cit. 2011-05-09]. Dostupné v archivu pořízeném z originálu dne 2010-12-15. (anglicky) 
  16. Peter Beverloo. List of Chromium Command Line Switches [online]. [cit. 2011-12-10]. Dostupné online. (anglicky) 
  17. WebSockets (support in Firefox) [online]. Mozilla Foundation, 2011-09-30 [cit. 2011-12-10]. Dostupné v archivu pořízeném dne 2012-05-26. (anglicky) 
  18. Bug 640003 - WebSockets - upgrade to ietf-06 [online]. Mozilla Foundation, 2011-03-08 [cit. 2011-12-10]. Dostupné online. (anglicky) 
  19. Bug 640003 - WebSockets - upgrade to ietf-07(comment 91) [online]. Mozilla Foundation, 2011-07-22. Dostupné online. (anglicky) 
  20. Chromium bug 64470 [online]. Google, 2010-11-25 [cit. 2011-12-10]. Dostupné online. (anglicky) 
  21. WebSockets in Windows Consumer Preview [online]. Microsoft, 2012-03-19 [cit. 2012-07-23]. Dostupné online. (anglicky) 
  22. WebKit Changeset 97247: WebSocket: Update WebSocket protocol to hybi-17 [online]. [cit. 2011-12-10]. Dostupné online. (anglicky) 
  23. A hot Opera 12.50 summer-time snapshot [online]. Opera Developer News, 2012-08-03 [cit. 2012-08-03]. Dostupné v archivu pořízeném z originálu dne 2012-08-05. (anglicky) 

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]