webSocket原理

webSocket三次握手

**1.客户端发送WebSocket握手请求:**当客户端想要建立WebSocket连接时,他会发送一个HTTP请求到服务器,HTTP协议版本不能低于1.1,GET请求到服务器,这个请求通常称为握手请求,其中包含一些特定的头信息,表示客户端希望升级到WebSocket协议

GET / HTTP/1.1

Upgrade: websocket

Connection:Upgrade

Host: example.com

Origin: [http://example.com

Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==

Sec-WebSocket-Version:13

**2.服务器响应握手请求:**服务器接收客户端的握手请求后,会进行一些协议验证,验证后会向客户端发送一个HTTP响应,响应中包含了一些头部信息,其中比较重要的是

验证协议和请求方法

WebSocket协议是基于HTTP1.1的,并且WebSocket协议规定了在初始握手阶段,客户端向服务器发送的请求方法必须是GET

检查头信息

检查请求头的Upgrade,和Connection

生成Sec-WebSocket-key

服务器收到客户端传来的Sec-webSocket-key之后,将其与固定的UID进行拼接,经过sha-1摘要计算和Base64编码,生成新的Base64编码值作为响应头的sec-websocket-accept字段

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection:Upgrade

Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=

Sec-WebSocket-Location: ws://example.com/

返回握手响应报文,他会返回HTTP响应,状态码为101,表示服务器理解客户端请求,需要客户端采取不同的协议来完成请求

3.客户端验证握手响应

检查状态码

客户端接收服务器的握手响应后,首先检查响应状态码是否为101

检查响应头信息

如upgrade和connection,以确保服务器升级到了websocket协议并建立持久链接

验证sec-websocket-accept头信息

客户端接收到服务器的握手响应后,将获取到的Sec-WebSocket-Accept与自己的Sec-Websocket-Key进行验证,如果两者相等,则验证通过,发送确认握手成功报文,否则,验证失败

4.确认握手并建立WebSocket连接

确认握手成功,客户端将连接从HTTP协议升级成webSocket协议,客户端和服务器之间的通信将采用webSocket协议进行双向实时数据传输

需要注意的是,WebSocket握手成功并升级协议后,后续的数据传输将不再遵循HTTP的请求-响应模型,而是使用WebSocket协议的帧结构进行数据交换

相关推荐
啊阿狸不会拉杆14 小时前
《计算机操作系统》第十二章 - 保护和安全
开发语言·网络·c++·算法·安全·计算机组成原理·计算机操作系统
咕噜咕噜万15 小时前
测试用例执行进度实时同步工具指南:从流程打通到效率提效的全链路落地
运维·网络
郝学胜-神的一滴15 小时前
Linux网络字节序详解:从理论到实践
linux·服务器·c语言·开发语言·c++·网络协议·程序人生
石像鬼₧魂石15 小时前
netsh wlan 常用命令速查表
服务器·网络·php
科技圈快讯15 小时前
外链分享防泄露场景:企业网盘实测分享控制功能
网络
yongui4783415 小时前
异构网络垂直切换算法MATLAB仿真实现
网络·算法·matlab
半路_出家ren15 小时前
5.RSA和AES加密(python)
服务器·网络·python·https·aes·rsa·加密算法
michael_ouyang15 小时前
IM 消息收发流程方案选型
前端·websocket·网络协议·typescript·electron
上海云盾-小余15 小时前
WAF性能优化:如何平衡安全防护与网站访问速度?
网络·安全·性能优化
北京耐用通信15 小时前
耐达讯自动化Profibus光纤中继模块实现冶金车间长距离抗干扰通信
人工智能·物联网·网络协议·自动化·信息与通信