WebSocket握手协议

来源:互联网 发布:node 编辑:程序博客网 时间:2024/04/30 14:13
  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结尾。
0 0
原创粉丝点击