HTTP1.x&HTTP2.0&WebSocket区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35975685/article/details/85331017
看了一些博客与文章,在这里总结一下,如有不对的地方请指正。

HTTP
HTTP协议(HyperText Transfer Protocol,超文本传输协议) ,是互联网上应用最为广泛的一种网络协议,OSI七层模型应用层的一种协议。所有的WWW文件都必须要遵守这个标准,默认端口为80。

HTTP请求响应模型
HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S) ,HTTP都是客户端发起请求,服务器回送响应。如下图:

主流版本区别
目前主流的版本有 Http1.0/Http1.1/Http2.0这三个版本的主要区别是什么呢

HTTP1.0 每建立一次TCP连接,只提供一次 request 请求和 response 请求,一次请求结束后,自动断开TCP连接
弊端:连接无法复用,每次请求都要经历三次握手和慢启动
HTTP1.1 支持持续长连接(Response Headers头中出现Connection:keep-alive),添加了请求流水线串行化单线程处理可以同时在一个TCP连接上发送多个请求,但是只有响应是有顺序的,只有上一个请求完成后,下一个才能响应,并且后续任务仍然受到头部阻塞的影响
HTTP2.0 采用多路复用,大幅度提升了web心梗,在与HTTP/1.1语义完全兼容的基础上,进一步减少了网络延迟和传输的安全性,支持明文传输,消息头压缩,二进制分帧(在应用层http和传输层tcp/udp之间增加一个二进制分帧层,解决Http1.1性能限制,改进传输性能,实现低延迟和高吞吐量)
头压缩:采用HPACK算法,当然解码的时候内部有两种字典来解码,第一种是静态字典一共有61种预定义字段,动态字典跟上下文有关,每个HTTP2.0都需要维护一份属于自己的动态字典
二进制分帧:原来HTTP保温的形式是文本传输,而HTTP2.0改进的前提是保证原来的报文结构不发生改变,HTTP1.1头部信息封装在Headers帧中,而消息体封装在Data帧中,然后再对这些帧采用二进制格式的编码转换为0和1的组合,这一个个的帧就是HTTP2.0连接传输的最小单元。
多路复用:HTTP1.1如果多次发送请求会根据FIFO的原则,第一个请求完成才会进行第二个,这也是会头部阻塞的原因,而HTTP2.0采用的是流的形式,一个请求对应一个流并分配一个流id,每个id表示不同的流,同时这个流是双向的,每一个帧都在这个流中进行传递,这也就提高了并发性。
多路复用好处
减少服务端连接压力,减少占用内存,提升连接吞吐量
连接数的减少改善网络阻塞情况,慢启动时间减少,阻塞和丢包回复速度更快
避免频繁创建和关闭(三次连接、四次挥手)
连接、流和帧的关系
一个连接同时被多个流所复用
一个流代表一次完整的请求/响应的过程,可以包含多个帧
一个消息被拆分/封装成多个帧进行传输
WebSocket
WebSocket是HTML5中的协议,本质上是基于TCP,先通过HTTP/HTTPS协议发起一条特殊HTTP请求进行握手后创建一个用于交换数据的TCP连接,也是支持长连接的。WebSocket是由HTTP先发起的,然后在转为WebSocket。当然在HTML5规范下还有SSE(Server-Sent Events,服务器推送事件)这种方式比长轮询(Long Polling)更高效,需要使用EventSource对象。

WebSocket优势:浏览器和服务器只需要做一个握手的动作,在建立连接之后,双方可以互相推送消息。

SSE与WebSocket区别
WebSocket是全双工通信,可以双向通信,功能更强;SSE是单向通信,只能服务器想浏览器推送。
SSE是一个轻量级协议,相对简单;WebSocket是一种较重的协议,相对复杂
SSE默认支持断线重连,WebSocket则需要额外部署
SSE支持自定义发送数据类型
总结:HTTP1.1使用Connection:keep-alive进行长连接,并不是永久保持连接,只是维持一段时间。WebSocket是真正实现长连接、全双工的通信。如果你的浏览器支持HTTP2.0可以点击这个连接就可以体验到HTTP/1.1与HTTP/2在图片加载的速度上的明显不同

在博客上看到一个websocket和轮询及长轮询的区别,很形象直接贴图了,如下:


————————————————
版权声明:本文为CSDN博主「云飞Ran」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35975685/article/details/85331017

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值