websocket 版本13的 握手算法
来源:互联网 发布:软件项目里程碑计划 编辑:程序博客网 时间:2024/05/22 01:44
问题终于搞好了,因为我用的是 Chrome 16.0.912.63,这个版本实现的是最新的HTML5 Websocket草案10的协议。而上面websocket4j实现在还是以前版本的协议。下面是草案10的主要协议:
服务器回应:
Chrome早就采用了websocket草案10的协议,很多以前支持websocket的代码突然之间都用不了了,很多作者也没空更新,索性自己看了下草案,自己实现了一套。
握手协议还是非常简单的,Chrome发过来的header大概是这样的:
1
<span style=
"line-height:21px;"
>GET / HTTP/
1.1
2
Upgrade: websocket
3
Connection: Upgrade
4
Host: localhost:
5555
5
Origin: http:
//localhost:8080
6
Sec-WebSocket-Key: qMqFlQcLvR7vHivCzUhEbQ==
7
Sec-WebSocket-Version:
13
</span>
要答复的头大概是这样的:
1
HTTP/
1.1
101
Switching Protocols
2
Upgrade: websocket
3
Connection: Upgrade
4
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
实际上这里要处理的就是算出这个Sec-WebSocket-Accept的值。这个非常简单,首先拿到Sec-WebSocket-Key,也就是dGhlIHNhbXBsZSBub25jZQ==,把它和字符串258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼在一起作为一个key,然后对这个key做一个SHA-1的加密,对加密后的字符串再base64就可以了。
3、第三种是带一个安全key的请求,结果是先以“SHA-1”进行加密,再以base64的加密,结果放在Sec-WebSocket-Accept请求头中返回的方式:
浏览器请求:
- 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=
接下来就是解析浏览器发来的数据了,这个相对来说要麻烦很多,相比草案7.6变得更复杂了。下图是数据传输的格式:
各个值的具体含义可以参考这个中文翻译:http://blog.csdn.net/fenglibing/article/details/6852497,英文原文在这里:http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10#section-4.2- websocket 版本13的 握手算法
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- VC++实现的WebSocket服务器端握手协议
- websocket最新协议的握手实现
- WebSocket握手服务端响应算法『java』
- python版本的websocket服务
- WebSocket握手协议
- WebSocket握手协议
- WebSocket(壹) 握手连接
- 什么是PE系统?怎样进入PE?PE的文件结构是什么?
- cookie与session(上) 转载 原文链接http://blog.sina.com.cn/s/blog_4745d1c10100ihnq.html
- cookie与session(下) 转载 原文链接http://blog.sina.com.cn/s/blog_4745d1c10100ihnq.html
- cookie与session(再比较) 转载 原文链接http://blog.sina.com.cn/s/blog_4745d1c10100ihnq.html
- my_vimrc
- websocket 版本13的 握手算法
- 情书
- AS3中以post和get方式提交数据
- 编译开源软件的一个问题----pkg-config找不到库
- Java环境搭建
- ant安装和ant的环境配置
- 01 Android应用的构成 四大组件 Activity, Intent Receiver , Service , Content Provider
- 腾讯微博项目 之 自定义ListView与图片异步加载
- 论ACM与泡妞