了解WebSocket是什么

163 阅读2分钟

「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

什么是 WebSocket

WebSocket是 HTML5 中的协议,支持持久连续,http 协议不支持持久性连接。Http1.0HTTP1.1都不支持持久性的链接,HTTP1.1中的 keep-alive,将多个 http 请求合并为1

WebSocket 是什么样的协议,具体有什么优点?

HTTP的生命周期通过 Request来界定,也就是 Request 一个 Response,那么在Http1.0协议中,这次 Http请求就结束了。在 Http1.1中进行了改进,是的有一个connection:Keep-alive,也就是说,在一个 Http 连接中,可以发送多个 Request,接收多个 Response。但是必须记住,在Http 中一个 Request只能对应有一个 Response,而且这个Response是被动的,不能主动发起。

WebSocket是基于 Http协议的,或者说借用了Http 协议来完成一部分握手,在握手阶段与Http 是相同的。我们来看一个 websocket 握手协议的实现,基本是2个属性,upgradeconnection
基本请求如下:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~

Upgrade:webSocket
Connection:Upgrade

依然是固定的,告诉客户端即将升级的是Websocket协议,而不是mozillasocket,lurnarsocket或者shitsocket

然后,Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sec-WebSocket-Protocol 则是表示最终使用的协议

但是Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求

最后说说WebSocket 和HTTP 吧

你可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁,它和 HTTP 有一些共性,是为了解决 HTTP 本身无法解决的某些问题而做出的一个改良设计。其中WebSocket 解决的第一个问题是,通过第一个 HTTP request 建立了 TCP 连接之后,之后的交换数据都不需要再发 HTTP request了,使得这个长连接变成了一个真.长连接