一 复习和目标
1 复习
上一节使用wireshark抓包分析了WebSocket流量
包含连接的建立:HTTP协议升级WebSocket协议
使用建立完成的WebSocket协议发送数据
2 目标
协议对比
初始握手和计算响应键值
消息格式
关闭握手
注:WebSocket服务器使用《HTML5 WebSocket权威指南》3.4节中使用nodejs实现,WebSocket客户端使用Chrome浏览器实现。
二 协议对比
特性
TCP
HTTP
WebSocket
寻址
IP地址和端口
URL
URL
并发传输
全双工
半双工
全双工
内容
字节流
MIME消息
文本和二进制消息
消息定界
否
是
是
连接定向
是
否
是
注:
TCP传送字节流,消息定界由高层协议来表现。
WebSocket中,多字节的消息作为整体、按照顺序到达。.
三 初始握手
1 HTTP请求升级协议和协议升级成功响应
HTTP请求
GET ws://localhost:9999/echo HTTP/1.1
Host: localhost:9999
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: UjxPJpGjxC4JH5+0znrYBg==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
HTTP响应
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
sec-websocket-accept: NTeDlW+9/P48+pMOtotMmM1m/J0=
注:响应不带Sec-WebSocket-Extensions代表该服务器不支持请求中的拓展
2 计算响应键值
(1)概述
响应中的sec-websocket-accept等于base64(sha1(请求中的Sec-WebSocket-Key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11))
(2)nodejs版本实现
var KEY_SUFFIX = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
function(key){ <