您的位置:首页 > 其它

WebSocket握手协议

2016-07-02 16:38 106 查看
WebSocket握手协议
webstocket是html5的一种新的协议,它实现了浏览器与服务器的双向通道,
使得数据可以快速的双向传播

通过一次简单的握手,建立了客户端和服务器的联系后,服务器可以主动推送信息给客户端,
而不需要客户端的反复请求

一个websocket连接是客户端与服务器端在http协议的初始握手阶段将其升级到websocket协议来建立的。
其底层还是tcp/ip连接

优点:
1.客户端和服务器端之间数据交流的表头比较小。大概2个字节
2.服务器和客户端可以主动的发送数据给对方
3.不需要有频率的创建TCP请求和销毁,节约宽带和服务器的资源

websocket    7.5、7.6、10版本的响应原理
7.5、7.6

GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5
Origin: http://example.com ^n:ds[4U
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample
8jKS’y:G*Co,Wxa-

服务器响应的方法:
   Sec-WebSocket-Key2的数字除以key中的空格数 结果为一个整数 12998531/6
将结果转成符合网络传输的网络字节数组;(每2字节作为ascii码转换成字符逆序组成p1)
Sec-WebSocket-Key1的数字除以key中的空格数 结果为一个整数 4146540115/6
将结果转成符合网络传输的网络字节数组;(每2字节作为ascii码转换成字符逆序组成p1)
然后把结果与请求最后的8个随机字符连在一起str
服务器的回答就是MD5(str)生成一个哈希值作为一个安全密钥

10

GET /ls HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: www.xx.com
Sec-WebSocket-Origin: http://www.xx.com Sec-WebSocket-Key: 2SCVXUeP9cTjV+0mWB8J6A==
Sec-WebSocket-Version: 8
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: mLDKNeBNWz6T9SxU+o0Fy/HgeSw=
服务器的响应方法
获取Sec-WebSocket-Key,把一段GUID“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”加到Sec-WebSocket-Key的后面
然后拿出这个字符串做sha1 hash()计算 然后在通过base64()加密反给客户端

Web Socket 可以穿越防火墙
websocket使用标准的80和443端口,这两个端口都是防火墙的友好端口所以不需要防火墙的允许。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: