WebSocked、SSE、http1.0、http1.1和http2.0之间的关系

1、WebSocked是个啥?

首先,WebSocked是html5搞出来的一种新的协议,所以和http没有什么联系,要说非要有联系就是他借用了http协议来完成一部分的握手,但它和http一样都是一种连接协议,建立在tcp协议之上,使用在应用层。

那么我们已经有了http协议为什么还要WebSocked呢?

因为WebSocked有一个最大的特点,就是服务器可以主动向客户端推送信息。而http协议只能做到客户端向服务器推送信息。

很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。

那么就很容易造成以下问题:
客户端:“有消息的话你叫我”
服务端:“好的”
//时间过了1s
客户端:“有消息了吗”
服务端:“没有”
//时间过了1s
客户端:“有消息了吗”
服务端:“没有”
//时间过了1s
客户端:“有消息了吗”
服务端:“没有”
//时间过了1s
客户端:“有消息了吗”
服务端:“。。。。”

这样的轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

当使用了websocked就会好很多
客户端:“有消息的话你叫我”
服务端:“好的”
服务端:“来消息了”
服务端:“来消息了”

2、WebSocked、SSE、http1.0、http1.1和http2.0的区别

SSE:服务器发送事件(Server-Sent Events),也是html5的推出的一种协议,仅单工通讯,通俗解释起来就是一种基于HTTP的,以流的形式由服务端持续向客户端发送数据的技术。优点是简单与传统的http协议几乎无差别。

websocked是一种持久连接协议,而http是不支持持久性连接的。

wecsocked是双工通信,SSE仅支持单工通信,建立连接后,只能由服务端发往客户端,且占用一个连接,如需客户端向服务端通信,需额外打开一个连接。

http1.0/1.1只能由客户端向服务器端发送数据,而websocked可以由服务器向客户端发送数据。

http1.0的生命周期为一个request,一个response,这样就结束了。

http1.1有了改进,有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response, 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

http/2.0提升了访问速度,允许多路复用:允许同时通过单一的连接发送多重请求-响应信息,二进制分帧:将传输的信息分割为更小的信息,并进行二进制编码,首部压缩,服务端推送。

3、WebSocked的实现

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

Upgrade: websocket
Connection: Upgrade
就是告诉服务器自己发起的是websocked协议

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
就是一系列的验证了

参考文献:https://www.cnblogs.com/fuqiang88/p/5956363.html
http://www.ruanyifeng.com/blog/2017/05/websocket.html

猜你喜欢

转载自blog.csdn.net/d1063270962/article/details/109600566