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=
Специфікація протоколу WebSocket визначає дві нові схеми URI, ws: та wss:, для нешифрованого та шифрованого з'єднання відповідно. Поза іменем схеми, решта складових URI визначена загальним синтаксисом URI.
Для встановлення з'єднання клієнтський скрипт створює об'єкт 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 підтримують такі браузери:
Також WebSocket підтримують
У кінці листопада 2010 Adam Barth опублікував результати дослідження надійності протоколу, де було з'ясовано, що у випадку використання прозорих проксі-серверів можлива підміна кешу передаваних даних з тим, що користувачі замість реальних даних отримуватимуть версію даних від зловмисника. Проблема виявилася досить серйозною для того, щоб розробники Firefox та Opera оголосили, що в майбутніх версіях їхніх браузерів підтримка вебсокетів буде за умовчанням відключена аж до усунення проблеми небезпеки цього протоколу (хоча залишилася можливість їх включити).
Нова версія -07 протоколу WebSocket, яка виправляє помилку протоколу, реалізована і включена по замовченню в Firefox 6 та у Chrome 14.
Також існує командна опція для Google Chrome (--enable-websocket-over-spdy
) що дозволяє ранню експериментальну реалізацію WebSocket через SPDY.
This article uses material from the Wikipedia Українська article WebSocket, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Вміст доступний на умовах CC BY-SA 4.0, якщо не вказано інше. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Українська (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.