5分钟看懂HTTP3

2020 年 8 月 25 日

5分钟看懂HTTP3

本文最初发布于 jesuisundev.com 网站,经原作者授权由 InfoQ 中文站翻译并分享。

你连 HTTP2 都还没搞明白,就有人开始谈 HTTP3 了,真让人火大。但 HTTP3 会受到关注也是有理由的:它速度很快。

很久以前

谈未来之前,咱们先讲讲现实。你了解 HTTP 吗?这个定义于 1991 年的协议是用来管理 Web 的。它的全名是超文本传输​​协议,让你可以从网页中获取资源,网页数据从 Web 服务器传输到你的浏览器上。它基于较低级别的协议——TCP,这里是重点——而且它是无状态的。这意味着每个请求都是完全独立的。页面上显示的每个 GIF 图片都在互联网上独立存在,这对这些 GIF 图片本身来说是好事。但对我们来说,这样的一个系统是有些支离破碎的。

问题在于每个请求一次只会查找一个文件。每次都要创建一个昂贵的 TCP 连接。想象一下,如果你的页面上有 10,000 个小技巧,这会是多么沉重的负担啊。

我知道有很多人喜欢我上一篇文章中制作的图片,所以为了更好地向大家解释互联网的协议机制,这里我会再做一张图。

尽管浏览器可以同时发出六个不同的请求,但是 HTTP 仍然很慢,并且需要很多 TCP 连接。另外,我们开发人员通常不会在意这一点。我们喜欢在页面上塞满各种垃圾。比如说巨大的 jQuery 库,包含 300 个无用的 CSS 样式表,结尾是一个透明的 8 兆大 PNG 图。

当谷歌发现我们在互联网上到处倾倒垃圾后,他们就开始搞一个称为 SPDY 的东西了。目的是什么呢?当然是加快互联网的速度。

SPDY 是一个规范,建议继续使用 HTTP,但要更改一些规则。通过压缩标头、对请求进行优先级排序和多路复用,它将把所有 TCP 请求和连接变成单独的一个!

具体来说,当你读取 HTML 时,浏览器会查看你在页面中要询问的所有内容。然后,它可以一次获取所有内容,这样就可以避免一个文件一个文件地获取了。

HTTP2 的第一份草案基于 SPDY。HTTP2 很快被广泛采用,随后互联网上的一切变得快多了。今天,互联网上 42.7%的内容使用 HTTP2。

关于 HTTP3

HTTP2 是以 HTTP 为基础并改动一些规则的产物。HTTP3 也是如此。换句话说,解释清楚现状后,我就可以很容易地讲明白未来是什么样子的。

谷歌是一个极客组织,他们永远不会停止脚步。SPDY 演变成为 HTTP2 后,他们认为它仍然不够快。因此,他们开始讨论 QUIC 这个项目。这是谷歌开发的第二项将成为 HTTP 协议的正式升级的技术。那么,这个协议有什么特别之处?

HTTP3 的主要改进在传输层上。传输层不会再有我前面提到的那些繁重的 TCP 连接了。现在,一切都会走 UDP。

顺便说一下,QUIC 的意思是“快速 UDP Internet 连接”。协议的这种更改将显著加快连接建立和数据传输的速度。然而,虽说 UDP 肯定更快、更简单,但它不具备 TCP 的可靠性和错误处理能力。

TCP 必须进行多次往返,才能以方形且稳定的方式建立连接。UDP 不会顾虑那么多,而且它确实可以快速运行,代价是稳定性下降和丢包的风险。但是,UDP 能大大减少请求中的延迟。到同一服务器的重复连接的延迟几乎为零,因为不需要往返来建立连接。

HTTP3 是 HTTP2 的复用和压缩,协议从 TCP 更改为 UDP。然后,谷歌的那些人在协议中添加了他们做的层,以确保稳定性、数据包接收顺序及安全性。

因此,HTTP3 在保持 QUIC 稳定性的同时使用 UDP 来实现高速度,同时又不会牺牲 TLS 的安全性。是的,在 QUIC 中就有 TLS1.3,你可以用它发起优雅的 SSL。这些层的底层机制是下面这样:

2018 年,QUIC 演变成为 HTTP3。互联网工程任务组(Internet Engineerring Task Force)的那帮制定互联网协议的哥们同意了这个提案。这是个好消息,因为对于我们这些急躁的人们来说,互联网的速度永远都不够快。

结语

HTTP3 代表着充满魅力的未来,它的 HTTP 基础潜能已经被谷歌的那些极客发挥到极致。在撰写本文时,只有 4.6%的互联网内容在使用 HTTP3,但这个数字在未来几年中可能会增长许多。本文只是简单谈了谈这方面的知识,但如果你想了解更多,网上有很多的文章可供你参考。

原文链接:

https://www.jesuisundev.com/en/understand-http3-in-5-minutes

2020 年 8 月 25 日 15:49 9456
用户头像

发布了 437 篇内容, 共 162.8 次阅读, 收获喜欢 880 次。

关注

评论 2 条评论

发布
用户头像
udp本身国内封锁的比较多,最终能不能大规模应用,依赖于国内网络的进化
2020 年 09 月 23 日 15:11
回复
用户头像
学不动了
2020 年 09 月 03 日 16:18
回复
没有更多评论了
发现更多内容

天猫成立房产部门,利用区块链承载交易多项服务功能

CECBC区块链专委会

区块链 房地产

本以为自己MySQL够牛逼了,直到亲自去阿里受虐了一次!

Java架构师迁哥

跨专业学习6个月,成功上岸阿里|滴滴,分享学习路线供大家参考

小Q

Java 学习 架构 面试 基础

智慧公安重点人员管控系统平台开发,智慧警务系统

13530558032

数字资产钱包开发方案,区块链数字钱包软件源码

13530558032

Java异常面试题(2020最新版)

Java架构师迁哥

从想当亿万富翁到职场、创业、爱情、抑郁、学医学武,我的程序人生

陆陆通通

Java 创业 程序员 爱情 程序员生活

未来已来!全球一流科技盛会——云栖大会9月17日线上隆重举办

北柯

TCP和HTTP中的KeepAlive机制总结

陈德伟

nginx TCP 性能 网络 HTTP

Java程序员博客系统推荐!我调研了100来个 Java 开源博客系统,发现这 5 个最好用!

云流

Java 项目管理 计算机 框架设计

git的几种实用操作(合并代码与暂存复原代码)

良知犹存

git

实战案例丨GaussDB for DWS如何识别坏味道的SQL

华为云开发者社区

数据库 sql 算子

数字货币交易所技术开发,交易所源码

13530558032

区块链技术智能合约有哪些实际的应用场景

CECBC区块链专委会

智能合约 区块链技术

Java-技术专题-JMX超详细解读

李博@Alex

QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考

科技缪缪

架构 编程语言

LeetCode题解:622. 设计循环队列,使用双向链表,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

数字经济时代来临 区块链护航数字资产安全

CECBC区块链专委会

金融 数字时代

Java-技术专题-AQS和Volatile和Synchronized实现原理

李博@Alex

DDD+微服务实战:什么是DDD?

AI代笔

微服务 领域驱动设计 DDD

易观方舟Argo+CRM | 让企业数据发挥更大价值

易观大数据

面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

小林coding

乐观锁 高并发 操作系统 计算机基础

赞!腾讯T4分享web性能笔记,竟包含大量网络协议的优化技巧

周老师

Java 编程 程序员 架构 面试

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Philips

敏捷开发 软件开发 .net core 开发工具

区块链支付系统开发技术方案,USDT支付系统搭建

13530558032

Spring-boot 单元测试

陈靓-哲露

为什么企业需要CRM系统?CRM的作用及其重要性分析

力软.net/java开发平台

软件开发 信息化 CRM

银行数仓体系发展之路

易观大数据

HTTP必知必会

陈靓-哲露

入行架构师之前,这7项技能你要先了解一下

华为云开发者社区

架构 架构设计 架构师

Spring Boot CLI 介绍

hungxy

Spring Boot Spring Boot CLI

5分钟看懂HTTP3-InfoQ