WebSocket握手协议

本文详细介绍了WebSocket协议的客户端和服务端握手过程,包括握手请求与回复的具体格式、加密KEY的生成算法,以及非握手文本消息的发送接收方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 客户端握手请求(注意:键值之间有一个空格,行间有换行符号0x13x10或者说\r\n)
    GET /WebSocket/LiveVideo HTTP/1.1
    Upgrade: WebSocket
    Connection: Upgrade
    Host: localhost:8080 (客户端请求主机)
    Origin: http://127.0.0.1 (来源网页地址)
    Sec-WebSocket-Key1: 23 asdfJKj,asdjk
    Sec_WebSocket-Key2: wewerw234 jij998
    0x13x10 + 8个字节Sec_WebSocket-Key3值,没有键名(注意,这里的0x13x10的额外的,也就说有两个连续的0x13x10)
  2. 服务端握手回复
    HTTP/1.1 101 Web Socket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: http://127.0.0.1 (来源网页地址)
    Sec-WebSocket-Location: ws://localhost:8080/WebSocket/LiveVideo 16个字节的加密KEY

加密KEY算法:

Sec_WebSocket-Key1的产生方式:
(1)提取客户端请求的Sec_WebSocket-Key1中的数字符组成字符串k1
(2)转换字符串为8个字节的长整型intKey1
(3)统计客户端请求的Sec_WebSocket-Key1中的空格数k1Spaces
(4)intK1/k1Spaces取整k1FinalNum
(5)将k1FinalNum转换成字节数组再反转最终形成4个字节的>Sec_WebSocket-Key1

Sec_WebSocket-Key2的产生方式:
(1)提取客户端请求的Sec_WebSocket-Key2中的数字符组成字符串k2
(2)转换字符串为8个字节的长整型intKey2
(3)统计客户端请求的Sec_WebSocket-Key2中的空格数k2Spaces
(4)intK2/k2Spaces取整k2FinalNum
(5)将k2FinalNum转换成字节数组再反转最终形成4个字节的Sec_WebSocket-Key2

Sec_WebSocket-Key3的产生方式:
客户端握手请求的最后8个字节

将Sec_WebSocket-Key1、Sec_WebSocket-Key2、>Sec_WebSocket-Key3合并成一个16字节数组
再进行MD5加密形成最终的16个字节的加密KEY

  1. 消息发送接收
    客户端和服务端发送非握手文本消息时,消息以utf-8编码,并以0x00开头,0xFF结尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值