WebSocket — це протокол, що призначений для обміну інформацією між браузером та вебсервером в режимі реального часу. Він забезпечує двонаправленийповнодуплексний канал зв'язку через одинTCP-сокет. WebSocket спроектовано для втілення увеббраузерах тавебсерверах, але може також використовуватись будь-якимклієнт-сервернимзастосунком.Прикладний програмний інтерфейс WebSocket був стандартизованийW3C, крім того протокол WebSocket стандартизованийIETF якRFC 6455.[1]
У вебзастосунках доцільно використовувати протокол за необхідності відображення інформації в 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:,[2] для нешифрованого та шифрованого з'єднання відповідно. Поза іменем схеми, решта складових URI визначена загальним синтаксисом URI.[3]
Для встановлення з'єднання клієнтський скрипт створює об'єкт WebSocket, в конструктор якого передає параметр WebSocketURI, і визначає функції зворотного виклику при з'єднанні, отриманні повідомлення і розриві з'єднання.
<html><head><script>constwebSocket=newWebSocket('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 опублікував[6] результати дослідження надійності протоколу, де було з'ясовано, що у випадку використання прозорихпроксі-серверів можлива підміна кешу передаваних даних з тим, що користувачі замість реальних даних отримуватимуть версію даних від зловмисника. Проблема виявилася досить серйозною для того, щоб розробники Firefox та Opera оголосили[7][8][9], що в майбутніх версіях їхніх браузерів підтримка вебсокетів буде за умовчанням відключена аж до усунення проблеми небезпеки цього протоколу (хоча залишилася можливість їх включити).
Нова версія-07 протоколу WebSocket, яка виправляє помилку протоколу, реалізована і включена по замовченню в Firefox 6[10] та у Chrome 14.[11]
Також існує командна опція для Google Chrome (--enable-websocket-over-spdy) що дозволяє ранню експериментальну реалізацію WebSocket черезSPDY.[12]
{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)