http1.0 1.1 2对比和一些问题

HTTP2通过Multiplexing多路传输特性在一个TCP连接中同时处理多个请求,解决了HTTP1.x的线头阻塞问题,减少了连接数量。当浏览器与服务器协商使用HTTP2失败或不支持HTTPS时,会建立多个HTTP1.1连接。TCP连接有时会被缓存,避免重复的SSL握手。
摘要由CSDN通过智能技术生成

对比

  • http1.0
    • 问题:一次tcp只支持一次请求,发完就立即断开
    • 解决:可以设置keep-alive保持tcp连接
  • http1.1
    • 对比1.0的改进:将keep-alive写进的标准,一次tcp可以发送多个请求,请求写明connection:close才断开,可以和服务器建立多个 TCP 连接。
    • 新问题:单个tcp的同一时刻只能处理单个请求(不能同时处理多个请求)
    • 解决:Pipelining可解决,但是默认关闭。(也有隐藏的很多问题,如连接头阻塞。一些代理服务器不能处理,Chrome 最多允许对同一个 Host 建立六个 TCP 连接)
  • http2
    • 对比2.0问题改进: Multiplexing 多路传输特性,在一个 TCP 连接中同时完成多个 HTTP 请求

收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?

如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。

如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了

多路复用

在一个 TCP 连接上,我们可以向对方不断发送帧,每帧的 stream identifier 的标明这一帧属于哪个流,然后在对方接收时,根据 stream identifier 拼接每个流的所有帧组成一整块数据。 把 HTTP/1.1 每个请求都当作一个流,那么多个请求变成多个流,请求响应数据分成多个帧,不同流中的帧交错地发送给对方,这就是 HTTP/2 中的多路复用。

流的概念实现了单连接上多请求 - 响应并行,解决了线头阻塞的问题,减少了 TCP 连接数量和 TCP 连接慢启动造成的问题

所以 http2 对于同一域名只需要创建一个连接,而不是像 http/1.1 那样创建 6~8 个连接:

为什么有的时候刷新页面不需要重新建立 SSL 连接?

TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。

参考:

一个 TCP 连接可以发多少个 HTTP 请求 - 割肉机 - 博客园 (cnblogs.com)

HTTP2 详解 - 掘金 (juejin.cn)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值