websocket协议-浅析

由服务器主动推送给浏览器(客户端)的,这就是websocket的应用。
简单举例有以下几种场景:

  • 股票价格实时的更新;
  • 各种赛事图文直播数据更新的信息;
  • 网页游戏信息实时更新;
  • 各种扫码登陆的场景…

如何区分websocket协议?

  1. 先分析数据包Connection字段是否有Upgrade标识;
  2. 如果有再继续看Upgrade字段是不是websocket标识。
    在这里插入图片描述

关键流程–握手

websocket的请求消息

websocket的握手也就是服务端和客户端一来一回,并不是三次握手。
关注其中的几个关键的东西:keyGUIDsha-1base64编码。
请求信息:

GET ws://localhost:8080/ws HTTP/1.1
Host: localhost:8080
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54
Upgrade: websocket
Origin: http://localhost:8080
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Sec-WebSocket-Key: YodYgA8yYy8SlvY/Q0QHAQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

如上面的请求包所示:

  1. GET请求的链接是ws://
  2. 关注两个字段ConnectionUpgrade,字段的内容分别是Upgradewebsocket,表示将http升级成websocket
  3. 注意Sec-WebSocket-KeySec-WebSocket-Version两个字段,key字段是一个base64编码加密的随机值,由浏览器生成,version表示版本
websocket的响应消息

介绍一下websocket服务端响应消息的流程:

  1. 先握手,获取到http升级成websocket协议的标识

  2. 再读取Sec-WebSocket-Key字段的内容和GUID作拼接

  3. 拼接完之后再哈希加密,就是使用SHA-1

  4. 最后再将这个串进行base64编码

如上所述,websocket的响应大致就是这样的一个流程

关键流程–传输

可参考RFC6455文档
在这里插入图片描述
如图所示:
消息头中分别有以下几个特殊的标志位

FIN(1bit)
RSV1(1bit)
RSV2(1bit)
RSV3(1bit)
Opcode(4bit)
Mask(4bit)
Payload length(4bit)
Masking-key(32bit)
Payload data(可变)

参考链接: 弄懂websocket
参考链接: Websocket协议原理及Ws服务器代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值