Websocket详解
websocket草案版本
websocket主要有两种协议草案,一种是早期的draft-hixie-thewebsocketprotocol,另外一种是延用至现在的draft-ietf-hybi-thewebsocketprotocol。两种草案中又有各自对应的细化版本。详细可见
https://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-00
https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00
下图展示的主要使用的版本
- [ ] 注:草案7显示的版本号(Sec-WebSocket-Version)为7,草案8到草案12版本号都是8,草案13至文档编写时的草案版本(RFC 6455)显示为13
websocket草案版本演进及实例讲解
- 基于Flash的WebSocket通讯,使用场景是IE的多数版本,因为IE的多数版本不都不支持WebSocket协议,以及FF、CHROME等浏览器的低版本,还没有原生的支持WebSocket,可以使用FLASH的WebSocket实现进行通讯。参见hixie75草案(draft)
浏览器请求:
服务器响应:
原理:
如果客户端没有发送Origin请求头,则客户端不需要返回,如果客户端没有发送WebSocket-Protocol请求头,服务端也不需要返回;服务端唯一需要组装返回给客户端做为校验的就是WebSocket-Location请求头,拼装一个websocket请求的地址就可以了。
这种方式,是最老的一种方式,连一个安全Key都没有,服务端也没有对客户的请求做加密性校验。
2. 第二种握手方式是带两个安全key请求头的,结果以md5加密,并放在body中返回的方式。参见hixie76草案(draft)
请求响应:
原理:
以下面的key为例:
Sec-WebSocket-Key1: 2907uU7Df`nw”3] c 360\ 2 c
Sec-WebSocket-Key2: B3v2{ 40535 J,n0X/0:4u e
首先,我们把Sec-WebSocket-Key1和Sec-WebSocket-Key2中的所有数字从左到右提出来组成一个整数,那么上面的示例可以组成2907733602和 3240535004两个数。
接下来我们去数两个串各自的空格数,数出来分别为6和4
然后