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端口,这两个端口都是防火墙的友好端口所以不需要防火墙的允许。
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端口,这两个端口都是防火墙的友好端口所以不需要防火墙的允许。
相关文章推荐
- RemoteView基础知识(一)
- Hive的一些常识性技巧
- C语言sizeof和strlen
- 阿里云 Ubuntu 14.04 安装mysql 5.6
- PHP多文件上传
- CSS3 Transform、Transition和Animation属性总结
- iOS当前日期n天后的date
- Android canvas.drawArc() 画圆弧
- Android仿微信选择图片
- APUE(5)---标准I/O库 (1)
- NHibernate系列文章七:NHibernate对象状态
- WebSocket握手总结- CHROME与safari区别
- #!/bin/bash和#!/bin/sh的区别
- Android图像开源视图:SmartImageView
- navicat 关于orcale新建表空间,用户和权限分配
- android surfaceView+mediaPlayer 自定义视频播放器
- 如何使用android studio进行多渠道的打包?
- C/C++基本数据类型长度
- CodeForces 101D Castle (贪心)
- android studio基本界面设置