美文网首页
白话入门HTTP家族,HTTP1.1, HTTP/2, HTTP

白话入门HTTP家族,HTTP1.1, HTTP/2, HTTP

作者: 肥兔子爱豆畜子 | 来源:发表于2021-12-30 14:16 被阅读0次

    本文属于白话简单理解,HTTP版本升级的详细特性可以参考文末所列文章。

    HTTP1.1在世纪之交千禧年左右发布的,相对于1.0来说提供了Keep-Alive长连接机制,可以做到连接复用,一般是做连接池模式,连接被线程使用的时候是线程独占的、用完之后归还回池供下次复用。不用每次通信都建立一次连接进行通信然后关闭,大大提升了通信效率。

    HTTP/2在15年发布,18年左右开始流行,提供了连接的多路复用机制,多个请求线程可以同时共享1个物理的TCP连接,非独占式复用。共享物理连接的过程中,每个请求线程发出的请求是可以通过称为Stream的逻辑连接来保证顺序性的。另外在传输数据上,与HTTP1.1使用明文文本不同,HTTP/2使用的是二进制分帧传输,且基于TLS做了加密。

    HTTP/2的问题或者说可优化空间在于:

    • 其底层使用的TCP协议存在队头阻塞问题,即多个请求打散为二进制帧通过1个TCP连接传输过程中,如果中间某个帧丢包了,那么排队在其后面的所有的包都需要等待重传。从另一个角度看,上层应用层协议HTTP/2通过多路复用和分帧打散传输试图解决之前后一个请求必须等前一个请求返回才能发送的排队现象,在传输层又给打回了原形,TCP的顺序性设计保证是没法绕开的。更糟糕的是,由于HTTP/2一般使用1个连接进行共享,一旦发生上述的队头阻塞问题相对于HTTP1.1的使用多个连接来说带来的影响更大,好歹HTTP1.1还有其他多个连接通道,HTTP/2就是整个通信全被阻塞了。
    • 另外,TCP连接准备阶段要经过3次握手,加上HTTP/2的TLS安全加密要求,这过程中要经过3、4个RTT(Round-Trip Time)的往返时间。

    于是,在谷歌的QUIC基础上,HTTP over QUIC即HTTP/3于2018年又推出了,没错,就是HTTP/2刚开始流行的时候。底层传输层不用TCP了,而是用的UDP协议。其着重解决了上面提到的HTTP/2的两个问题,丢包只会阻塞其自己的这个Stream逻辑连接,同一物理连接上的其他逻辑连接流不受影响。另外,由于基于的是QUIC和UDP协议,所以提供了快速握手连接建立的功能,只需要0、1RTT即可建立通信。

    参考

    Java 9 和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?

    HTTP/2做错了什么?刚刚辉煌2年就要被弃用了!?

    Google、Facebook等均开始支持的HTTP3到底是个什么鬼?

    一文读懂 HTTP/1HTTP/2HTTP/3 - 知乎 (zhihu.com)

    解读HTTP/3

    HTTP/2: The Dark Side of Moon - 知乎 (zhihu.com) HTTP/2不好的一面

    nginx反向代理http2? - 知乎 (zhihu.com) 介绍为啥nginx到上游服务器不使用HTTP/2 (但作为web服务器对浏览器支持HTTP/2是有收益的,页面图片多、静态资源多的情况)

    相关文章

      网友评论

          本文标题:白话入门HTTP家族,HTTP1.1, HTTP/2, HTTP

          本文链接:https://www.haomeiwen.com/subject/kqviqrtx.html