动态

详情 返回 返回

【WebSocket】總結 - 动态 详情

websocket 協議概述

Webscoket是Web瀏覽器和服務器之間的一種全雙工通信協議,其中WebSocket協議由IETF定為標準,WebSocket API由W3C定為標準。一旦Web客户端與服務器建立起連接,之後的全部數據通信都通過這個連接進行。通信過程中,可互相發送JSON、XML、HTML或圖片等任意格式的數據。

websocket是基於TCP的一個應用協議,與HTTP協議的關聯之處在於websocket的握手數據被HTTP服務器當作HTTP包來處理,主要通過Update request HTTP包建立起連接,之後的通信全部使用websocket自己的協議。

  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 ...                :
 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
 |                     Payload Data continued ...                |
 +---------------------------------------------------------------+

Header

Sec-WebSocket-Protocol

Sec-WebSocket-Protocol報頭指定了你希望使用的一個或多個WebSocket協議,按優先級排序。第一個被服務器支持的將被服務器選擇並在響應中包含的Sec-WebSocket-Protocol頭中返回。你也可以在頭文件中使用它不止一次;結果與在單個報頭中使用逗號分隔的子協議標識符列表相同。

需要WebSocket服務器實現了相關protocol,否則這個字段沒什麼用。


// socket.io-client
var socket = io({
    protocols: ["control"]
});

// 原生
var Socket = new WebSocket(url, [protocol]);

Sec-WebSocket-Version

  • 請求頭
    指定客户端希望使用的WebSocket協議版本,以便服務器可以確認其端是否支持該版本。(一般不需要改動)
Sec-WebSocket-Version: version

version: 客户端與服務器通信時希望使用的WebSocket協議版本。這個數字應該是IANA WebSocket版本號註冊表中列出的最新版本。 WebSocket協議的最新最終版本是版本13。

  • 響應頭
    如果服務器不能使用指定版本的WebSocket協議進行通信,它將響應一個錯誤(例如426 Upgrade Required),該錯誤在其報頭中包含一個Sec-WebSocket-Version報頭,以及一個以逗號分隔的支持協議版本列表。如果服務器不支持請求的協議版本,則響應中不包含Sec-WebSocket-Version頭。
Sec-WebSocket-Version: supportedVersions

supportVersions: 服務器支持的WebSocket協議版本的逗號分隔列表。

Sec-WebSocket-Accept

當服務器願意發起一個WebSocket連接時,包含在服務器在握手過程中的響應消息中。它將在響應頭中出現不超過一次。

Sec-WebSocket-Accept: hash

參考文章

  • 協議升級機制
  • WebSocket 協議 RFC 文檔(全中文翻譯)
user avatar lazytimes 头像 werbenhu 头像 nortyr 头像
点赞 3 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.