websocket是Html5 提供的一个浏览器与服务器间进行全双工通讯的网络技术,依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。
websocket是html5出的一个协议 跟http协议没有关系 下面简单介绍下websocket的协议以及握手
websocket跟http关系
websocket和http一样都是基于tcp协议的传输 websocket和http是两种不同的东西 客户端要建立 websocket链接时候要在header标记一个Upgrade的HTTP请求表示请求升级 服务端返回响应101的状态码 完成握手以后再发送收据就么有http的事了
websocket协议
Websocket是一个持久化的协议 协议分为ws(80端口)协议 和wss(443端口)协议
websocket握手
websocket是基于http协议 也可以说借用了http完成了一部分握手
-
客户端发送的握手请求
GET /chat HTTP/1.1 Host: XXX.com Connection: Upgrade Upgrade: websocket Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Sec-WebSocket-key: XXXX 复制代码
上面依次介绍下
-
GET /chat HTTP/1.1
可以是是chat 聊天 也可以game 游戏
-
Connection: Upgrade Upgrade: websocket
这告诉服务器给升级到websocket协议
-
Sec-WebSocket-Protocol: chat, superchat
用户自定义的字符串 在同一个url下 不同服务的所需要的协议 比如聊天chat 也可以其他的自定义
-
Sec-WebSocket-Version 告诉服务器所使用的协议版本
-
Sec-WebSocket-Key 是base64加密的字符串 浏览器自动生成
-
-
服务端响应客户端握手请求
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat 复制代码
上面依次介绍下
- HTTP/1.1 101 Switching Protocols 就是返回101状态码
- Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= 对Sec-WebSocket-key的加密 同意握手建立链接 客户端收到 Sec-WebSocket-Accept后 将本地的Sec-WebSocket-key 编码做一个对比来验证