websocket的握手流程
上面我们讲过了,websocket是从HTTP协议升级的,客户端通过发送:
代码语言:javascript复制Upgrade: websocket
Connection: Upgrade
到服务器端,对协议进行升级。我们举一个具体的例子:
代码语言:javascript复制GET /webscoket HTTP/1.1
Host: www.flydean.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x123455688xafe=
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://flydean.com
对应的server端的返回:
代码语言:javascript复制HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: Qhfsfew12445m=
Sec-WebSocket-Protocol: chat
在上面的例子中,除了使用Upgrade头之外,客户端还向服务器端发送了Sec-WebSocket-Key header。这个header包含的是一个 base64 编码的随机字节。server对应的会返回这个key的hash值,并将其设置在Sec-WebSocket-Accept header中。
这里并不是为了安全操作,而是为了避免上一次的连接缓存情况。