首先,最重要的两点:
1,WebSocket和HTTP都是基于TCP协议的两个不同的协议
2,WebSocket依赖于HTTP协议
实际上,WebSocket为H5出现,它是HTTP协议的扩展,与HTTP协议相比,可以实现客户端和服务器的长连接,而且支持双向通信
既然,WebSocket依赖于HTTP连接,那么它如何从连接的HTPP协议转化为WebSocket协议?
其实,WebSocket协议在第一次握手连接时,是通过HTTP协议传送给服务端WebSocket支持的版本号、协议的字版本号、原始地址、主机地址等一些列字段
GET/chat HTTP/1.1
Host:server.demo.com
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Key:dGHllHNhbXBsZSBub25jZQ==
Origin:http://test.com
Sec-WebSocket-Version:13
上面报文最关键的地方,就是有个Upgrade首部,这个就是用来把当前的HTTP请求升级到WebSocket协议,这个是属于HTTP协议本身的内容,是为了扩展支持其他的通讯协议。倘若服务器支持新的协议,则必须返回101:
HTTP/1.1 101 Switching Protocols
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Accept:s3pOLMBiTvaxqcQ9CDzRns+xAS=
如果请求成功,就触发onopen事件,否则触发onerror事件,此后的传输就不再依赖HTTP协议