Websocket

WebSocket — це протокол, що призначений для обміну інформацією між браузером та вебсервером в режимі реального часу.

Він забезпечує двонаправлений повнодуплексний канал зв'язку через один TCP-сокет. WebSocket спроектовано для втілення у веббраузерах та вебсерверах, але може також використовуватись будь-яким клієнт-серверним застосунком. Прикладний програмний інтерфейс WebSocket був стандартизований W3C, крім того протокол WebSocket стандартизований IETF як RFC 6455.

У вебзастосунках доцільно використовувати протокол за необхідності відображення інформації в real-time. Альтернативна технологія — Server-sent events[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.

Виноски

Посилання

    Статті
  • WebSockets / Виктор Клим // htmlhook.ru. — 07.05.2012, оновлено 05.11.2016.

Tags:

Websocket Встановлення зєднанняWebsocket URL-схемиWebsocket Реалізація WebSocket у браузерахWebsocket ВиноскиWebsocket ПосиланняWebsocketInternet Engineering Task ForceTransmission Control ProtocolWorld Wide Web ConsortiumВеббраузерВебсерверЗастосунокКлієнт-серверПрикладний програмний інтерфейсСокет

🔥 Trending searches on Wiki Українська:

Теракт у «Крокус-Сіті Голлі»Розстріляне відродженняКривий РігПутін — хуйло!Булгаков Михайло ОпанасовичОб'єднана штурмова бригада Нацполіції «Лють»Список кодів МКХ-10Alexa InternetБезпілотний літальний апаратНорвегіяМихайлівський Золотоверхий монастирНаціональний університет «Києво-Могилянська академія»110-та окрема механізована бригада (Україна)Дональд ТрампКонор Мак-ГрегорФранціяХронологія російського вторгнення в Україну (березень 2024)Кам'янськеСоняшникКібератака на «Київстар» (2023)Диверсійно-розвідувальна групаШвейцаріяЗодіакНаселення УкраїниПетлюра Симон ВасильовичУкрзалізницяСліпакТу-22МСвятослав ІгоровичМаріупольЧернівціРоберт ОппенгеймерХ-59Погони родів військ ЗСУЗайменникПідляшшяБіополімериСписок країн за населенням92-га окрема штурмова бригада (Україна)Гімн УкраїниЮщенко Віктор АндрійовичЯрослав МудрийЗакарпатська областьХристиянствоВійськово-облікова спеціальністьВільнюсYouTubeСловеніяОбчислення дати ВеликодняОвен (знак зодіаку)Джавед КарімМалюк Василь ВасильовичКременчукДруга світова війнаБалтиморVodafone УкраїнаПеретворення одиниць вимірюванняСписок українських чоловічих іменТуреччинаУкраїнська кухняВійна у В'єтнаміРадіо «Свобода»Повітряні сили Збройних сил УкраїниРозетка (інтернет-магазин)ВікіпедіяКарл ЛіннейСписок штатів СШАМастерШеф (Україна)Джо БайденГолос АмерикиПаскаОб'єднані Арабські ЕміратиОбласті УкраїниСпорідненістьАлкалоїдСлужба безпеки УкраїниГра престолівФАБ-500Картопляний голод🡆 More