HTTP/3 水文

272 阅读7分钟

这篇文章不会完整的描述整个HTTP3,仅会普及网络协议中的一些基本概念以及这些概念是如何影响到我们的

HTTP/2 (Base TLS)

下图是HTTP协议的分层结构图,从下往上看可以看出HTTP/3还是基于IP协议的

  • Port Numbers
  • Conection oriented
  • Congestion control
  • Reliabiliy
  • Connectioin migration
  • 0-RTT
  • Stream multiplexing
  • Prioritization
  • Header compression
  • Server push

Why Base TLS

其实HTTP2协议本身和HTTP1.1一样是有明文传输版本的,但是头部浏览器厂商对于现实的理解认为未来的网络一定是默认安全的,所以我们现在现在使用的HTTP2协议都是强依赖于TLS

特性

Stream Multiplexing(流多路复用)

提问环节:

  • 什么是Stream (流)
  • 什么是Multiplexing (多路复用)

Binary Framing Layer (二进制框架层,国内很多翻译成二进制分帧)

At the core of all performance enhancements of HTTP/2 is the new binary framing layer (Figure 12-1), which dictates how the HTTP messages are encapsulated and transferred between the client and server.

HTTP/2所有性能增强的核心是新的二进制帧层(图12-1),它规定了HTTP消息如何在客户端和服务器之间封装和传输。

Ref: High Performance Browser Networking | O'Reilly

提问环节:

  • 为什么要做二进制框架层
  • 具体解决了什么问题

Header Compression(头部压缩)

疗效

我们先看看压缩效果,我们先来看一下HPACK压缩效果。比如说一个简单的HTTP请求,Header大约是 900 Byte,在 HTTP/2.0 中,首次请求会被压缩到 600 Byte,接着在后续的请求中会被压缩到 120 Byte,首次请求压缩率达到 50% ,后续达到 95% 。可以说效果是非常明显的,如下图( wireshark 抓包 ):

实验:我们使用 curl 命令发起请求观察。先发起一个 http1.1 请求,再连续发起2个 HTTP2 请求对比。

怎么做的

这个不是我们这次分享的重点(面试不会问霍夫曼编码的细节)

kiosk007.top/post/http-2…

TLS

short for Transport Layer Security

怎么保证安全的(技术层面)

各版本的关系

提问环节:12306的证书为啥是红的?

辩证的安全

这个信任链有其实均为关键点风险:

  1. 首先操作系统和浏览器就有可能被篡改
  2. 浏览器信任的根证书机构是一个实体,而一旦是实体,那么实体的安全就是相对的,比如Russia境内的之前签发的证书被吊销

RTT

提问环节:什么是RTT?

一个数据包从你的电脑上到达服务器的时间长度,通常可以理解为物理距离/光速。当然这个理解是非常理想化的,在我们一个请求到达我们目标的server之间,还有大量的网络设备负责分发和路由我们的数据,所以路过整个网络链路是通畅的话,我们的数据包的到server时间还需要加上网络设备的处理和延迟时间,所以会比物理距离/光速还要再增加很多

HTTPS (3.5 RTT)

为什么要说RTT,因为RTT在各种网络协议中非常关键的指标,以常见的HTTPS来看

当用户和我们的server建联时,需要3.5RTT,而这3.5个RTT是无论如何没有办法优化的,

HTTP3

来源

HTTP/3 将是自 2015 年 HTTP/2 获得批准以来对超文本传输协议的第一次重大升级。

HTTP/3 的一个重要区别是它在一种新的传输协议 QUIC 上运行。QUIC 专为移动密集型互联网使用而设计,在这种环境中,人们携带的智能手机会在一天中不断地从一个网络切换到另一个网络。开发第一个互联网协议时情况并非如此:当时设备的便携性较差,且不经常切换网络。

QUIC 的使用意味着 HTTP/3 依赖于用户数据报协议 (UDP),而不是传输控制协议 (TCP)。切换到 UDP 将使在线浏览时的连接速度和用户体验更快。

QUIC 协议由 Google 于 2012 年开发,并在互联网工程任务组 (IETF)(一个厂商中立的标准组织)开始创建新的 HTTP/3 标准时采用。在咨询了世界各地的专家之后,IETF 进行了许多更改以开发自己的 QUIC 版本。

QUIC

Think of QUIC as being similar to TCP+TLS+HTTP/2 implemented on UDP

这句话的意思是再给你一次机会,你会怎么重新设计HTTP/3,或者是怎么重新设计互联网的基础协议

长啥样 (What does it look like)

架构

TQUIC(腾讯开源)

XQUIC(阿里开源)

Why UDP

提问环节:why UDP

特性

解决队头阻塞(HOL)

HTTP 1.1 HOL

提问环节:怎么发生

HTTP2 HOL

提问环节:怎么发生

为什么会发生?

连接迁移

场景

今天晚上9点,大家都通过这个页面打车回家

然后打到车了,你开始下楼,你一开始是连的公司的WIFI,进了电梯之后发现WIFI断了变成5G了,部分iPhone甚至丢失了信号。出了电梯之后你发现界面不再变化,甚至失去了响应。你不得不关闭当前页面,再进一次?

提问环节:why?

方案

不再依赖TCP,只要基于TCP那么IP切换时TCP的链接必然会断,此时上层的应用程序无法感知HTTP请求就中断了,如果应用程序没有为这种情况考虑过预案,那么你必须重新初始化这个应用。

基于UDP搭建QUIC,拥有自行管理引入Connection ID概念,

抓个包看看

HTTP/3怎么落地

大厂

浏览器目前未默认打开HTTP/3

检查浏览器是否打开了H3的支持 http3.is/

浏览器厂家目前也没有计划默认开启HTTP/3,因此至少在浏览器层面是无法落地的

Chrome

To fully enable HTTP/3 in Chrome, you must launch it with the command line options --enable-quic --quic-version=h3-27 :

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --enable-quic --quic-version=h3-27

Firefox

Set network.http.http3.enabled to true in about:config

另外捉个虫:http/3 现在被缩写为 h3,而我们常说的h5可不是http5

  • H5 = HTML5,当我们描述我们要开发一个在手持移动设备上运行的页面的时候,不应该描述为H5页面,这是一个病句。HTML5 页面,桌面端也一样是HTML5 页面。
  • PC = Personal Computer,当我们描述要开发一个在Laptop或者台式机上运行的页面时,不应该描述为PC页面,这同样是一个病句。手机是冯诺依曼架构下的计算机,手机是你个人所有的所以手机也是PC。当然还有其他误读为PC等于运行Windows操作系统的计算机

客户端App集成

观察大厂均是在视频场景、高QPS场景、弱网场景下有提升。而对一些静态资源的加载提升微乎其微(主要静态资源可以直接缓存,主站的入口甚至都可以缓存)

  • 在RPC请求场景,网络耗时降低15%
  • 在直播高峰期场景,卡顿率降低30%、秒开率提升2%
  • 在短视频场景,卡顿率降低20%

参考

  1. HTTP/3 原理实战
  2. 深入剖析HTTP3协议-腾讯云开发者社区-腾讯云
  3. Quic与HTTP3.0 - 掘金
  4. 使用 wireshark 抓包深入理解 QUIC
  5. 关于队头阻塞(Head-of-Line blocking),看这一篇就足够了
  6. HTTP/3 Prioritization Demystified
  7. 与延迟的斗争
  8. HTTP/2.0 Header Compression
  9. HTTP2 协议长文详解
  10. An overview of TLS 1.3 and Q&A
  11. Parallel streaming of progressive images
  12. HTTP/3 From A To Z: Core Concepts — Smashing Magazine
  13. HTTP: HTTP/2 - High Performance Browser Networking (O’Reilly)
  14. QUIC协议分析-基于quic-go
  15. 深入 HTTP/3(一)|从 QUIC 链接的建立与关闭看协议的演进
  16. 深入 HTTP/3(2)|不那么 Boring 的 SSL