http1和http2的区别

255 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

面试题:http1http2的区别?

一、http1中的问题

  • TCP的慢启动:刚开始 TCP 协议会采用一个非常慢的速度去发送数据,然后慢慢加快发送数据的速度,直到发送数据的速度达到一个理想状态,我们把这个过程称为慢启动
  • 竞争宽带:同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽
  • 队头阻塞:我们知道在 HTTP/1.1 中使用持久连接时,虽然能公用一个 TCP 管道,但是在一个管道中同一时刻只能处理一个请求,在当前的请求没有结束之前,其他的请求只能处于阻塞状态

其中TCP的慢启动竞争宽带属于TCP本身的机制,队头阻塞是由于 HTTP/1.1 的机制导致的。

二、http2的处理方案

思路

一个域名只使用一个 TCP 长连接和消除队头阻塞

多路复用的实现:

通过引入二进制分帧层,就实现了 HTTP 的多路复用技术。

  • 首先,浏览器准备好请求数据,包括了请求行、请求头等信息,如果是 POST 方法,那么还要有请求体。
  • 这些数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器。
  • 服务器接收到所有帧之后,会将所有相同 ID 的帧合并为一条完整的请求信息。
  • 然后服务器处理该条请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层。
  • 同样,二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器。
  • 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求。

其他新特性

  • 可以设置请求的优先级
  • 服务器推送
  • 头部压缩

总结

htttp2相对于http1多了一个二进制分帧层,实现了多路复用,并且有设置请求优先级、服务器推送和头部压缩的特性。