WebSocket究竟是什么东西

2022-03-14 科技 60阅读
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手”
。在WebSocket
API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket
协议中,为我们实现即时服务带来了两大好处:

1.Header

互相沟通的Header是很小的-大概只有2Bytes

2.ServerPush

服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

握手协议例子
编辑

浏览器请求

GET/webfin/websocket/HTTP/1.1

Host:localhost
Upgrade:websocket

Connection:Upgrade
Sec-WebSocket-Key:xqBt3ImNzJbYqRINxEFlkg==
Origin:http://服务器地址
Sec-WebSocket-Version:13

服务器回应

HTTP/1.1101SwitchingProtocols
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Accept:K7DJLdLooIwIG/MOpvWFB3y3FE8=

WebSocket借用http请求进行握手,相比正常的http请求,多了一些内容。其中,

Upgrade:websocket

Connection:Upgrade

表示希望将http协议升级到Websocket协议。

Sec-WebSocket-Key是浏览器随机生成的base64encode的值,用来询问服务器是否是支持WebSocket。

服务器返回

Upgrade:websocket

Connection:Upgrade

告诉浏览器即将升级的是Websocket协议

Sec-WebSocket-Accept是将请求包“Sec-WebSocket-Key”的值,与”258EAFA5-E914-47DA-95CA-C5AB0DC85B11″这个字符串进行拼接,然后对拼接后的字符串进行sha-1运算,再进行base64编码得到的。用来说明自己是WebSocket助理服务器。

Sec-WebSocket-Version是WebSocket协议版本号。RFC6455要求使用的版本是13,之前草案的版本均应当被弃用。

更多握手规范详见RFC6455。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com