Websocket握手

      最后更新:2022-03-16 20:18:25 手机定位技术交流文章

      当客户希望使用 WebSocket 协议与服务连接时, 第一步是握手, WebSocket 握手使用 HTTP Uppgrade 机制, 客户可以提供以下结构来开始握手( 请注意 WebSocket 握手只允许使用 HTTP Get 方法 ):

      设置 HTTP 页眉中的 Uppglade 字段为 Websocket, 并在 Concrection 字段中指定, 如果服务器支持 WebSocket 协议并接受握手, 服务器可以返回到下面显示的结构 :

      让我们来体验一下WebSocket握手的复杂情况, 客户的握手除了 Unggrade 配置外, 还需要设置更多的页眉字段。

      • Sec-WebSocket-Key是客户端创建的一个随机的 16 字节值,然后是 base64 编码,客户端必须确保该值足够随机,无法预知(换句话说,客户端应使用一个具有足够大英特罗比的随机数字生成器),头字段必须在 WebSocket 协议中通过,如果客户端开始握手,它无法完成握手。
      • WebSocket- 安全- Version RFC 6455 协议的版本号是13 RFC 6455 如果客户端同时支持多个 WebSocket 版本,可以在字段中提供一份支持版本的清单(按所需应用程序的递减顺序排列),服务器可以从中选择支持版本的协议。
      • 可以选择,当客户开始握手时,可以在头部设置字段Sec-WebSocket-Protocol。字段的价值是一个子协议(subprotocol),客户想要使用该子协议,当服务接口按照客户所期望的顺序按多个子协议之间的逗号分隔,按客户所希望的顺序订购服务接口时,服务器可以从客户提供的列表中选择一个或多个子协议。
      • Sec-WebSocket-Extensions,可选,客户端可以在 WebSocket 握手阶段设置网络软件协议扩展,

      如果服务器支持 WebSocket 协议并同意与客户端握手, 它返回 HTTP 状态代码 101, 同意更新协议, 并设置 Uppglade 字段, 更改 WebSocket 的值, 并设定 Upglade 的值, 这与 HTTP Uppglade 常规方法完全相同, 服务器也应该设置与 WebSocket 相关的信头字段 :

      • 接受- 安全- 网络套件- 安全- 网络套件- 安全- 网络套件- 安全- 安全- 网络套件- 安全魔数 (Magic Number) "258EAFA5-E914-47DA- 95CA-C5AB0DC85B11"例如,假设客户将字符串“dGhliHHNbZSBub25j” 通信,服务器应首先将字符串与WebSocket编号合并到基代码64,其最终值是字段的价值,假设客户将字符串“Sec-WebSocket-Key” 传输到“dGhliHNbXZSBUB25j”,然后执行字符串到桥值发送,假设客户将字符串和WebSocket编号合并到基代码64,其最后值是字段的价值,假设客户将字符串“Sec-WebSocket-Key” 传输到“dGhliHNbXSBUB25j”,然后执行字符串到Hashi值 0。Sec-WebSocket-Accept此链接的价值是 s3pplMBiTxaQ9kGzzhzrk+xOo=, 当客户从服务中握手时, 使用同样的计算方法来验证该值是否是为了确定服务所有人是否实际支持 WebSocket 协议, 而该链接的设计是为了验证最终服务提供方对网络服务协议的支持, 因为简单使用 Uppglade 机制也可能返回到预期的网络服务商那里, 该服务商没有正确执行 HTTP 升级机制, 但实际上不支持 WebSocket, 引入 WebSocket 魔术号码和一系列操作将会提供相当程度的确定性, 服务提供方实际支持 WebSocket 协议 。
      • Sec-WebSocket-Protocol,可选,如果客户在握手期间传送预期的WebSocket副协议,服务器可以从客户通报的副协议清单中选择一个支持的副协议,或服务器不得设置客户不希望或不支持的WebSocket副协议。
      • 可选性,类似于Sec-WebSocket-Protocol 字段,当客户发送扩展列表时,服务器可以为字段选择一个值,如果服务提供商不支持或不希望使用扩展则服务器不设置字段。
      • 强制性 Sec-WebSocket-Version 选择客户端发送的 WebSocket 协议版本之一, 如果客户发送的所有 WebSocket 协议版本都不支持服务, 服务器将立即停止握手, 并返回 HTTP 426 状态代码, 同时在信头字段中设置 Sec- WebSocket-Version 以向客户提供它支持的 WebSocket 版本列表 。

      如果客户握手,客户根据上述原则以握手回应,客户验证服务方握手回答,如果支票成功,WebSocket握手成功,双方可以开始双向数据传输。在建立握手机制后,必须阻止客户;换句话说,客户必须等待服务作出反应,然后才开始数据传输。

      • 客户应首先核实服务提供的身份代码是否为101;只有在HTTP身份代码为101的情况下,协议升级才能代表服务批准;对于其他类型的身份代码,客户应根据HTTP身份代码语义处理。
      • 客户应核实该服务提供的答复是否有Unglade字段,如果没有,客户应终止WebSocket的握手。
      • 客户端应核实升级字段值是否为网络套件( 字段对案件不敏感, 例如 Websocket、 WebSocket、 WebSocket 等) ), 如果没有, 客户端应终止 WebSocket 握手 。
      • 如上所述,客户应验证服务器提供的Sec-WebSocket-Accept字段的价值,如果该字段不存在或不能满足预期,客户应终止WebSocket握手。
      • 如果服务器返回信头, 当用户与服务进行握手时, 服务器返回信头, 而字段的价值不在客户端提供的数值列表中, 客户端应终止 WebSocket 连接 。
      • 如果服务器返回信头, 而字段的价值不在客户端在与服务进行握手时提供的数值列表中, 客户端应终止 WebSocket 连接 。

      如果客户验证服务成功握手,WebSocket握手阶段即告完成,WebSocket双向数据流动即为启用。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/20223.html

          热门文章

          文章分类