WebSocket协议

WebSocket让我们可以在客户端和web服务端之间实现实时通信,不需要客户端发起请求,服务端就可以直接向客户端发送数据,目前大多数浏览器都支持WebSocket协议。由于这一特性,它能够应用到很多场景下,比如游戏,服务实时监控,IM,直播等。

WebSocket是一种在一个TCP连接上进行全双工通信的协议,它与HTTP同样默认工作在80和443端口,并且支持HTTP代理和中间件,所以WebSocket能够适配HTTP协议。WebSocket的工作机制是通过HTTP协议建立连接,再使用WebSocket协议进行数据通信,过程如下:

  1. 客户端向web服务端发起http1.1请求,请求头中带有Connection: Upgrade和Upgrade: WebSocket,要求将协议转变为WebSocket协议。
  2. 服务端如果支持WebSocket协议,同样返回Connection: Upgrade头和Upgrade: WebSocke响应头。
  3. 双方一旦建立连接,即可进行双向的WebSocket数据传输,就不再是HTTP数据了。

可以使用telnet进行实验。
首先发送请求建立连接,这里需要将整个WebSocket的URL作为path。

$ telnet www.myserver.com 80

GET ws://www.myserver.com/myws HTTP/1.1
Host: www.myserver.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: 7KjJnV4J6RcHj6xFm5IDwQ==

成功的话很快收到响应。

HTTP/1.1 101 Switching Protocols
Server: nginx/1.14.2
Date: Fri, 11 Jan 2019 23:50:27 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: BCc8E9VXXx699+tqKe+wYd3DUvI=

服务端返回101 Switching Protocols,切换协议到WebSocket,双方即完成连接建立,后续就是WebSocket数据通信了。

客户端发送的Sec-WebSocket-key实际上是随机字节的base64编码,这里随便发个xxx也是可以的,而服务端响应的Sec-WebSocket-Accept是该编码的hash,这个机制只是用来防止缓存代理发送同样的会话,并没有任何加密鉴权校验等功能。

我们可以通过Chrome的调试界面看到WebSocket会话信息。


观察WebSocket会话过程信息

参考

https://en.wikipedia.org/wiki/WebSocket
https://en.wikipedia.org/wiki/HTTP/1.1_Upgrade_header

感谢您的阅读,有任何问题请交流指正。peace~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上篇介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较。 W...
    TheAlchemist阅读 36,747评论 15 113
  • 看惯了朋友圈的鸡汤;听多了朋友讲的爱情故事;刷多了微博浪漫的场景,以为这才是爱情,是一个有责任的男生应该对...
    一只猫的感情阅读 2,726评论 0 1
  • 第一次尝试markdown写作 今天看了李笑来的财富自由之路,这本书看起来好像是用markdown写成的。 想起了...
    李明轩Matthew阅读 2,481评论 0 0
  • 期中考试,对于这次的考试成绩太不理想了,我数学刚刚及格,语文不及格,以后我要端正学习态度,我要背熟语文...
    刘嘉兴阅读 3,446评论 0 0