WebSocket — це протокол, що призначений для обміну інформацією між браузером та вебсервером в режимі реального часу. Він забезпечує двонаправлений канал зв'язку через один TCP-сокет. WebSocket спроектовано для втілення у веббраузерах та вебсерверах, але може також використовуватись будь-яким клієнт-серверним застосунком. Прикладний програмний інтерфейс WebSocket був стандартизований W3C, крім того протокол WebSocket стандартизований IETF як RFC 6455.
У вебзастосунках доцільно використовувати протокол за необхідності відображення інформації в real-time. Альтернативна технологія — [en].
Встановлення з'єднання
Щоб встановити WebSocket-з'єднання, клієнт надсилає handshake-запит — так званий запит на встановлення довіри, своєрідне, «цифрове рукостискання». Клієнт також надсилає свій відкритий ключ Sec-WebSocket-Key
для шифрування повідомлень для нього. Відкритий ключ в секції параметрів HTTP-запиту кодується в форматі base64.
GET /ws HTTP/1.1 Host: pmx Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 6 Sec-WebSocket-Origin: http://pmx Sec-WebSocket-Extensions: deflate-stream Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
В разі встановлення з'єднання, сервер надсилає клієнтові відповідь. Де сервер, через правильне заповнення параметра Sec-WebSocket-Accept
надає підтвердження, що він дійсно може встановлювати WebSocket-з'єднання. Алгоритм формування: до значення Sec-WebSocket-Key
у вигляді як його отримав сервер, додається стрічка 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
; для отриманої стрічки розраховують SHA1-хеш, який кодується в форматі base64. На приклад:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
URL-схеми
Специфікація протоколу WebSocket визначає дві нові схеми URI, ws: та wss:, для нешифрованого та шифрованого з'єднання відповідно. Поза іменем схеми, решта складових URI визначена загальним синтаксисом URI.
Реалізація WebSocket у браузерах
Для встановлення з'єднання клієнтський скрипт створює об'єкт WebSocket, в конструктор якого передає параметр WebSocket URI, і визначає функції зворотного виклику при з'єднанні, отриманні повідомлення і розриві з'єднання.
<html> <head> <script> const webSocket = new WebSocket('ws://localhost/echo'); webSocket.onopen = event => { alert('onopen'); webSocket.send("Hello Web Socket!"); }; webSocket.onmessage = event => { alert('onmessage, ' + event.data); webSocket.close(); }; webSocket.onclose = event => { alert('onclose'); }; </script> </head> <body> </body> </html>
WebSocket підтримують такі браузери:
- Google Chrome (починаючи з версії 4.0.249.0);
- Apple Safari (починаючи з версії 5.0.7533.16);
- Mozilla Firefox (починаючи з версії 4);
- Opera (починаючи з версії 10.70 9067);
Також WebSocket підтримують
- мобільна версія Safari в iOS 4.2
- BlackBerry Browser в OS7
У кінці листопада 2010 Adam Barth опублікував результати дослідження надійності протоколу, де було з'ясовано, що у випадку використання прозорих проксі-серверів можлива підміна кешу передаваних даних з тим, що користувачі замість реальних даних отримуватимуть версію даних від зловмисника. Проблема виявилася досить серйозною для того, щоб розробники Firefox та Opera оголосили, що в майбутніх версіях їхніх браузерів підтримка вебсокетів буде за умовчанням відключена аж до усунення проблеми небезпеки цього протоколу (хоча залишилася можливість їх включити).
Нова версія -07 протоколу WebSocket, яка виправляє помилку протоколу, реалізована і включена по замовченню в Firefox 6 та у Chrome 14.
Також існує командна опція для Google Chrome (--enable-websocket-over-spdy
) що дозволяє ранню експериментальну реалізацію WebSocket через SPDY.
Виноски
- RFC 6455
- . Iana.org. 14 листопада 2011. Архів оригіналу за 24 серпня 2010. Процитовано 10 грудня 2011.
{{}}
: Недійсний|deadurl=404
() - draft-hixie-thewebsocketprotocol-76 - The WebSocket protocol. Tools.ietf.org. Архів оригіналу за 17 липня 2013. Процитовано 10 грудня 2011.
- Katie Marsal (23 листопада 2010). Apple adds accelerometer, WebSockets support to Safari in iOS 4.2. AppleInsider.com. Архів оригіналу за 17 липня 2013. Процитовано 9 травня 2011.
- Web Sockets API. RIM. Архів оригіналу за 17 липня 2013. Процитовано 8 липня 2011.
- Архівована копія (PDF). (PDF) оригіналу за 14 грудня 2010. Процитовано 14 грудня 2010.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 11 січня 2011. Процитовано 25 грудня 2011.
- Chris Heilmann (8 грудня 2010). WebSocket disabled in Firefox 4. Hacks.Mozilla.org. Архів оригіналу за 17 липня 2013. Процитовано 9 травня 2011.
- Aleksander Aas (10 грудня 2010). Regarding WebSocket. My Opera Blog. Архів оригіналу за 17 липня 2013. Процитовано 9 травня 2011.
- Dirkjan Ochtman (27 травня 2011). . Mozilla.org. Архів оригіналу за 26 травня 2012. Процитовано 30 червня 2011.
- Chromium Web Platform Status. Архів оригіналу за 17 липня 2013. Процитовано 3 серпня 2011.
- List of Chromium Command Line Switches. Peter.sh. Архів оригіналу за 17 липня 2013. Процитовано 10 грудня 2011.
Посилання
- HLL Websocket Server [ 31 грудня 2011 у Wayback Machine.] Article linked to live demo and providing downloadable dhtml for running final draft protocols (submitted as standard).
- IETF Hypertext-Bidirectional (HyBi) working group [ 15 липня 2017 у Wayback Machine.]
- The WebSocket protocol — Internet-Draft published by the IETF HyBi Working Group
- The WebSocket protocol [Архівовано 19 квітня 2012 у WebCite] — Original protocol proposal by Ian Hickson
- The WebSocket API [ 7 червня 2015 у Wayback Machine.] — W3C draft specification of the API
- сайт, присвячений WebSocket (підтримує тестовий луна-сервер на WebSocket)
- WebSocketsTest.org [ 7 жовтня 2010 у Wayback Machine.] сайт, який перевіряє роботу WebSockets і Comet у вашому браузері
- Статті
- WebSockets / Виктор Клим // htmlhook.ru. — 07.05.2012, оновлено 05.11.2016.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
WebSocket ce protokol sho priznachenij dlya obminu informaciyeyu mizh brauzerom ta vebserverom v rezhimi realnogo chasu Vin zabezpechuye dvonapravlenij kanal zv yazku cherez odin TCP soket WebSocket sproektovano dlya vtilennya u vebbrauzerah ta vebserverah ale mozhe takozh vikoristovuvatis bud yakim kliyent servernim zastosunkom Prikladnij programnij interfejs WebSocket buv standartizovanij W3C krim togo protokol WebSocket standartizovanij IETF yak RFC 6455 U vebzastosunkah docilno vikoristovuvati protokol za neobhidnosti vidobrazhennya informaciyi v real time Alternativna tehnologiya en Vstanovlennya z yednannyaShob vstanoviti WebSocket z yednannya kliyent nadsilaye handshake zapit tak zvanij zapit na vstanovlennya doviri svoyeridne cifrove rukostiskannya Kliyent takozh nadsilaye svij vidkritij klyuch Sec WebSocket Key dlya shifruvannya povidomlen dlya nogo Vidkritij klyuch v sekciyi parametriv HTTP zapitu koduyetsya v formati base64 GET ws HTTP 1 1 Host pmx Upgrade websocket Connection Upgrade Sec WebSocket Version 6 Sec WebSocket Origin http pmx Sec WebSocket Extensions deflate stream Sec WebSocket Key x3JJHMbDL1EzLkh9GBhXDw V razi vstanovlennya z yednannya server nadsilaye kliyentovi vidpovid De server cherez pravilne zapovnennya parametra Sec WebSocket Accept nadaye pidtverdzhennya sho vin dijsno mozhe vstanovlyuvati WebSocket z yednannya Algoritm formuvannya do znachennya Sec WebSocket Key u viglyadi yak jogo otrimav server dodayetsya strichka 258EAFA5 E914 47DA 95CA C5AB0DC85B11 dlya otrimanoyi strichki rozrahovuyut SHA1 hesh yakij koduyetsya v formati base64 Na priklad HTTP 1 1 101 Switching Protocols Upgrade websocket Connection Upgrade Sec WebSocket Accept HSmrc0sMlYUkAGmm5OPpG2HaGWk URL shemiSpecifikaciya protokolu WebSocket viznachaye dvi novi shemi URI ws ta wss dlya neshifrovanogo ta shifrovanogo z yednannya vidpovidno Poza imenem shemi reshta skladovih URI viznachena zagalnim sintaksisom URI Realizaciya WebSocket u brauzerahDlya vstanovlennya z yednannya kliyentskij skript stvoryuye ob yekt WebSocket v konstruktor yakogo peredaye parametr WebSocket URI i viznachaye funkciyi zvorotnogo vikliku pri z yednanni otrimanni povidomlennya i rozrivi z yednannya lt html gt lt head gt lt script gt const webSocket new WebSocket ws localhost echo webSocket onopen event gt alert onopen webSocket send Hello Web Socket webSocket onmessage event gt alert onmessage event data webSocket close webSocket onclose event gt alert onclose lt script gt lt head gt lt body gt lt body gt lt html gt WebSocket pidtrimuyut taki brauzeri Google Chrome pochinayuchi z versiyi 4 0 249 0 Apple Safari pochinayuchi z versiyi 5 0 7533 16 Mozilla Firefox pochinayuchi z versiyi 4 Opera pochinayuchi z versiyi 10 70 9067 Takozh WebSocket pidtrimuyut mobilna versiya Safari v iOS 4 2 BlackBerry Browser v OS7 U kinci listopada 2010 Adam Barth opublikuvav rezultati doslidzhennya nadijnosti protokolu de bulo z yasovano sho u vipadku vikoristannya prozorih proksi serveriv mozhliva pidmina keshu peredavanih danih z tim sho koristuvachi zamist realnih danih otrimuvatimut versiyu danih vid zlovmisnika Problema viyavilasya dosit serjoznoyu dlya togo shob rozrobniki Firefox ta Opera ogolosili sho v majbutnih versiyah yihnih brauzeriv pidtrimka vebsoketiv bude za umovchannyam vidklyuchena azh do usunennya problemi nebezpeki cogo protokolu hocha zalishilasya mozhlivist yih vklyuchiti Nova versiya 07 protokolu WebSocket yaka vipravlyaye pomilku protokolu realizovana i vklyuchena po zamovchennyu v Firefox 6 ta u Chrome 14 Takozh isnuye komandna opciya dlya Google Chrome enable websocket over spdy sho dozvolyaye rannyu eksperimentalnu realizaciyu WebSocket cherez SPDY VinoskiRFC 6455 Iana org 14 listopada 2011 Arhiv originalu za 24 serpnya 2010 Procitovano 10 grudnya 2011 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Nedijsnij deadurl 404 dovidka draft hixie thewebsocketprotocol 76 The WebSocket protocol Tools ietf org Arhiv originalu za 17 lipnya 2013 Procitovano 10 grudnya 2011 Katie Marsal 23 listopada 2010 Apple adds accelerometer WebSockets support to Safari in iOS 4 2 AppleInsider com Arhiv originalu za 17 lipnya 2013 Procitovano 9 travnya 2011 Web Sockets API RIM Arhiv originalu za 17 lipnya 2013 Procitovano 8 lipnya 2011 Arhivovana kopiya PDF PDF originalu za 14 grudnya 2010 Procitovano 14 grudnya 2010 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 11 sichnya 2011 Procitovano 25 grudnya 2011 Chris Heilmann 8 grudnya 2010 WebSocket disabled in Firefox 4 Hacks Mozilla org Arhiv originalu za 17 lipnya 2013 Procitovano 9 travnya 2011 Aleksander Aas 10 grudnya 2010 Regarding WebSocket My Opera Blog Arhiv originalu za 17 lipnya 2013 Procitovano 9 travnya 2011 Dirkjan Ochtman 27 travnya 2011 Mozilla org Arhiv originalu za 26 travnya 2012 Procitovano 30 chervnya 2011 Chromium Web Platform Status Arhiv originalu za 17 lipnya 2013 Procitovano 3 serpnya 2011 List of Chromium Command Line Switches Peter sh Arhiv originalu za 17 lipnya 2013 Procitovano 10 grudnya 2011 PosilannyaHLL Websocket Server 31 grudnya 2011 u Wayback Machine Article linked to live demo and providing downloadable dhtml for running final draft protocols submitted as standard IETF Hypertext Bidirectional HyBi working group 15 lipnya 2017 u Wayback Machine The WebSocket protocol Internet Draft published by the IETF HyBi Working Group The WebSocket protocol Arhivovano 19 kvitnya 2012 u WebCite Original protocol proposal by Ian Hickson The WebSocket API 7 chervnya 2015 u Wayback Machine W3C draft specification of the API sajt prisvyachenij WebSocket pidtrimuye testovij luna server na WebSocket WebSocketsTest org 7 zhovtnya 2010 u Wayback Machine sajt yakij pereviryaye robotu WebSockets i Comet u vashomu brauzeri Statti WebSockets Viktor Klim htmlhook ru 07 05 2012 onovleno 05 11 2016