为啥HTTP2普及后,大部分框架还是基于HTTP1.1做开发?

今天看到一篇帖子,大概就是讲了,从http 1 ,发展到http1.1 ,再发展到的http2 ,当然,后面google 想推的http3 并没涉及。

可能是来自于面试官的问题:浏览器中,一个tcp 链接可以发起多少个http 请求,同一个域名下,会建立多少个tcp 链接。

http 1 中,是很纯粹的一个tcp 一个http请求,请求结束就断开链接。

http1.1 中,就优化了,一次链接,多次http请求,优化的部分是,tcp 的建立和断开。

http 2 中,进一步优化,采用多路复用。那么和1.1 的区别呢?1.1 中,必须一次请求正确返回后,才能进行下一次的请求。而在2中,tcp 链接时可以不断的把请求发送到服务端,通过返回的数据中,一个唯一ID 的东西确定这是哪一次请求的结果。

当然,tcp 链接的数量是由浏览器本身限制的,不同浏览器不同,chorme 默认约6个。

那篇帖子还提到:我们实际开发的时候,都是使用的http1.1。

那么问题来了:

为什么有http2 了还要用http1.1?

首先,最表层的回答,大概是,使用的框架,例如tornado,它不支持http2。仅仅是http1.1 的版本。相当于,我们其实还是一个框架小子。

进一步思考背后的原因:

http2 必须基于https。我们实际的项目中,https往往是在开发后交给nginx 来实现的。所以,这也是为啥我们实际情况下,用到的只有http1.1。

进一步的追问,nginx是可以开启http2 的支持的。那为什么我们要采取由nginx 来开启http2 而不是框架本身开启http2呢?

目前的理解起来,最大的点,大概是多点部署与tcp长链接的关系(以下纯个人的感受,没证据证明,只是这样方便自己理解):

在通过nginx 部署时,浏览器其实是建立客户端到nginx所在服务器的链接,而在http2时,就算多个请求顺序来到,通过多点部署,他能很好的把实际的执行转发出去,能够很好的利用集群来满足并发需求。同时各种负载均衡的算法,又能很好的利用起来集群中的各台服务器,各个核。

而在框架本身中,如果支持前端不断的把请求发送到本地,局限于单台服务器核的数量,他能实际并发执行的量有限,所有任务都来了,也只能顺序执行。所以带来的效果就是,http1.1 和http2 没有啥区别(大概是设想只有一个核时,最容易理解吧)。

而同时把http2的启用,交给nginx,能够把功能拆分开,简化各个模块,各自专注于某一个点,在不改变开发模式的情况下,又能利用集群。

所以,也就完全没有理由去开发http2 的框架了吧?

大佬们,前辈们,有何高见也欢迎探讨。

HTTP/2作为HTTP/1.1的进化版本,在很多方面都有改进,如多路复用、头部压缩、服务器推送等。但为什么HTTP/2没有普及呢? 首先,HTTP/2的推广受到了老版本HTTP协议存在的庞大基础的限制。HTTP/1.1已经广泛应用于互联网,许多网站和服务器都已经适应了HTTP/1.1的工作方式,这些网站和服务器在迁移至HTTP/2时需要付出大量的时间和成本,而且还要确保兼容性,因此对于许多已经运行良好的系统来说,迁移并不是一个紧迫的任务。 其次,虽然HTTP/2在一些方面有明显的性能优势,但并不是所有场景都适合使用HTTP/2。比如对于小型网站或者只有少量并发连接的应用来说,HTTP/1.1已经足够满足需求,并没有太大的必要迁移到HTTP/2。 此外,网络设备和浏览器的兼容性也是HTTP/2普及的一个挑战。尽管HTTP/2已经得到主流浏览器的支持,但仍然可能有些老版本浏览器或者其他设备不支持HTTP/2,这限制了HTTP/2的广泛应用。 最后,HTTP/2在保持长连接的同时,对网络带宽有更高的要求。因为HTTP/2使用多路复用来传输数据,某些情况下可能会导致带宽增加。对于一些网络条件较差或带宽有限的地区,使用HTTP/2可能并不明智。 综上所述,HTTP/2的普及受限于HTTP/1.1庞大的基础、已有系统和设备的兼容性、应用场景的要求以及网络带宽限制等各种因素。虽然HTTP/2有很多优点,但要实现普及还需要时间和各方的努力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值