技术分享
🗒️HTTP2.0协议学习
00 分钟
2023-2-28
2024-6-29
type
status
date
summary
slug
tags
category
password
URL
icon

背景

在优化页面加载速度的时候,发现了HTTP1.1并发数的限制,为了解除这个限制,准备把网站协议升级到HTTP2.0. 之前在学习《趣谈网络协议》的时候,有学习过HTTP2.0协议,但是没有输出成文档,因此借这个机会,系统梳理一下。

HTTP1.1存在的问题

HTTP2.0出现,肯定是为了解决前代HTTP存在的问题。在之前的HTTP协议中,主要存在连接无法复用、连接并发数限制等。
由于HTTP是基于TCP协议,因此在新建HTTP链接时,都会经历三次握手和慢启动,当延迟较高时,对相应速度的影响会更明显些。如果能实现链接复用,则可以极大程度降低这些的影响。
当前Chrome浏览器限制对同一个域名最大6个并发请求,当超过6个时,会阻塞后面的请求,严重拉低整个页面的加载速度(当前许多网站为了避开这个影响,会使用多个域名的CDN,也是因为这个限制)。

HTTP2.0的优势

多路复用

HTTP2.0中的一大亮点就是多路复用,即允许同时通过单一的HTTP2.0连接发起多重的请求-响应消息,这样就解决了HTTP1.1中并发数的限制。那为什么1.1不能实现多路复用呢?是因为HTTP2.0使用了不同的传输格式。

二进制分帧

在HTTP1.1和1.0时代,传输的是明文协议,其格式由三部分组成:start line, header 和body,整体解析是基于文本的。 但是在HTTP2.0中,不再基于文本,而是将一个请求分割成多个二进制帧,结构如下
notion image
我们可以通过stream ID区分这个二进制帧是哪个请求的,同时,在传输时,帧与帧时间也没有严格的顺序要求,等传输到目标端口后再进行合并即可。
此外,在HTTP2.0中,还可以针对每个stream设置优先级和依赖,优先级高的会被server优先处理。

首部压缩

在HTTP1.1中,每次请求都需要发送整个请求头,但是多次发送的请求头中许多信息都没有变化,这样就造成了带宽浪费。在HTTP2.0中,通讯双方各自缓存一份header fields表,这样既避免了重复header的传输,减少了发送包的数量从而降低了延迟。
HTTP2.0优点并不只有上述列出的几项,列出的几项都是与自己工作关系最为密切或者感知最明显的优化。这篇博客参考了一些资料,这些资料中有更加详细的解释,大家有兴趣的可以移步看下。

参考资料

  1. https://www.zhihu.com/question/34074946
  1. https://www.zhihu.com/question/24774343/answer/96586977
  1. https://bbs.huaweicloud.com/blogs/298180
    上一篇
    langchain简版教程附案例
    下一篇
    解决实际项目中stalled时间过久的问题