Какова структура WebSocket-сообщения?

Пользователь

от judd , в категории: Другие , год назад

Какова структура WebSocket-сообщения?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от nicola , год назад

@judd 

WebSocket-сообщение состоит из двух частей: заголовка (header) и данных (payload).


Заголовок (header) содержит информацию о типе сообщения, его длине, а также другие опциональные поля. Он имеет фиксированный размер и всегда передается в первых двух байтах сообщения.


Данные (payload) могут быть любого типа и могут содержать любую информацию, которую нужно передать. Они следуют за заголовком и могут иметь любую длину.


Структура заголовка может различаться в зависимости от версии протокола WebSocket и флагов, установленных в сообщении. В общем случае заголовок состоит из следующих полей:

  • FIN (1 бит) - указывает, является ли данное сообщение последним в серии сообщений.
  • RSV1, RSV2, RSV3 (каждый 1 бит) - зарезервированные биты, которые могут использоваться для определенных расширений протокола.
  • Opcode (4 бита) - определяет тип сообщения (текстовое сообщение, бинарное сообщение, закрытие соединения и т.д.).
  • Mask (1 бит) - указывает, использовано ли маскирование данных.
  • Payload length (7 бит или 7+16 бит или 7+64 бита) - указывает длину данных в сообщении.
  • Masking key (если указан флаг Mask) - ключ, используемый для маскирования данных.


Общая структура WebSocket-сообщения выглядит следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-------+-+-------------+-------------------------------+
 |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
 |I|S|S|S|  (4)  |A|     (7)     |             (16/64)            |
 |N|V|V|V|       |S|             |   (if payload len==126/127)   |
 | |1|2|3|       |K|             |                               |
 +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
 |     Extended payload length continued, if payload len == 127  |
 + - - - - - - - - - - - - - - - +-------------------------------+
 |                               |Masking-key, if MASK set to 1  |
 +-------------------------------+-------------------------------+
 | Masking-key (continued)       |          Payload Data         |
 +-------------------------------- - - - - - - - - - - - - - - - +
 :                     Payload Data continued ...                :
 +