前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从HTTP/3的演进看web优化

从HTTP/3的演进看web优化

原创
作者头像
醉酒鞭名马
修改于 2020-04-20 02:28:15
修改于 2020-04-20 02:28:15
2.3K1
举报

本文介绍http协议各个版本的问题,及改进优化点

1、HTTP发展时间线

http协议演进时间线
http协议演进时间线

2、Http/0.x 特点及问题

1963年 http雏形阶段,Ted Nelson创建了第一个http基础架构

1991年HTTP 0.9 Tim Berners-Lee提交了草案,0.x版本开始记录在RFC 1945 1996年HTTP 1.0 对0.9版本进行了改进

Tim Berners-Lee的原稿
Tim Berners-Lee的原稿
  • 不支持多种类型文件下载:只能获取html文件(没有请求和响应头,浏览器只能按照协议规定视为html解析)
  • 限定了数据传输方式:简单的ASCII字节码传输方式(因为服务端返回都是html格式文件)
  • 不需要考虑连接复用问题(每次请求只有一个html)

http/0.9请求过程
http/0.9请求过程

随着浏览器诞生更新,推动http协议首要解决的问题是多种文件类型的支持

3、http/1.0改进及问题

  • 最大改进是增加了请求头和响应头(有了头部kv的标识,就可以约定和协商)
  • 对于头部信息的利用(增加了POST/HEAD方法、主动声明keep-alive、状态码、支持文件压缩、文件编码、用户代理、缓存机制…)

http/1.0请求过程
http/1.0请求过程

http/1.0的问题分析

  • TCP链接不能共用(创建和断开tcp连接的开销大,每次通信独占一个连接,每个请求都需要经过创建、断开TCP连接过程,连续的两个请求至少浪费3个RTT耗时,http1.0如果共用连接需要在请求和响应头同时设置Connection: keep-alive)
  • 不能够支持服务端虚拟主机技术(一个服务器多个host)
  • 动态内容支持不友好(浏览器接收数据需要依赖服务端响应头的Content-Length字段,服务端必须提前知道内容长度,否则导致浏览器不知道何时结束)
  • http队头阻塞问题(只支持串联通信,每个http请求必须等待前一个请求结束在开始,如果前一个请求丢包或其他原因没有响应,下一个请求必须等待)

4、http/1.1的改进及问题

1997年1月 HTTP1.1 1999年6月 补充修正记录在RFC 2068 RFC 2616

针对以上问题http1.1做了如下改进

  • 增加了tcp持久连接和同域名连接共享(默认开启keep-alive,多个请求可共用连接,浏览器为同域名允许同时创建6个tcp持久连接)
  • 请求头增加了HOST标识(用于标识当前请求的主机名)
  • 使用Chunk transfer 机制解决动态内容支持(服务器会将数据分割若干任意大小的数据块,发送每个数据块时附上上个数据块的长度,最后用零长度的块作为发送数据完成的标志。这样就提供了对动态内容的支持。)
  • 尝试使用管线化技术(pipelining)解决队头阻塞问题(在同一个tcp连接中并发发起多个请求,但是服务端依然要按照顺序接收)

额外的优化:

  • 引入了安全策略
  • 引入了cookie机制等

http/1.1请求过程
http/1.1请求过程

对于链接共用和域名分片

连接共享、域名分片
连接共享、域名分片

http/1.1的问题分析:

  • 不能充分利用带宽资源
    • 由于TCP的网络拥塞控制策略(为了保护减少网络拥塞,tcp采用慢启动发送数据,导致带宽不能被最大化利用)
    • 由于TCP的流量控制(滑动窗口)导致多条tcp连接带宽资源抢占问题(虽然增加了持久连接,同域名连接共享来使用cdn域名分片加速,但同一时间连接个数的也将抢占固定的带宽)
  • http队头阻塞问题(虽然1尝试使用管线技术解决并发问题,但是服务端依然按照顺序接收,所以最终放弃,选择建立6个连接,但是同连接下的请求依然是阻塞排队发送)
  • 多个请求阻塞问题(同域名可以连接共享,但请求数量大于6个时,请求依然需要队列等待)
  • 资源加载优先级问题(队头阻塞问题也会导致关键资源的加载滞后问题,影响首次渲染)

5、http/2的改进

2015年5月HTTP2上线,对HTTP1.1版本进行了优化改进,记录在RFC2754 RFC2754

对于带宽利用率、队头阻塞、请求优先级问题,引入了二进制分帧层做了如下实现:

  • 多路复用multiplexing(在应用层和传输层之间添加了二进制分帧层实现同域一个连接共享,二进制分帧层将请求头请求体编号分帧处理,服务端接收帧后按编号合并处理返回)
  • 请求优先级的设置(由于二进制分帧层的灵活性,可以标记额外帧信息,服务端也可以根据接收的关键资源顺序进行响应)

额外的优化

  • 数据加密传输
  • 添加了服务端推送能力
  • 头部压缩

http/2多路复用
http/2多路复用

http2 的问题分析

  • 单个TCP+TLS建立连接RTT耗时问题依然存在(3个RTT)
  • TCP队头阻塞依然存在(tcp的数据丢失重传机制导致)

6、http3的改进

2018年11月7日 HTTP-over-QUIC 更名为HTTP3,基于UDP传输层协议QUIC

http协议演进
http协议演进

对以上问题,面临的tcp协议的修改,由于tcp协议应用广泛,中间设备和操作系统的协议僵化,http3使用基于UDP实现了传输层协议QUIC(quick udp internet connection)

  • 优化了创建连接,减少RTT个数(0个或1个RTT,基于QUIC减少了 TCP 三次握手及 TLS 握手时间)

http的RTT耗时
http的RTT耗时
  • 改进的拥塞控制(QUIC使用了TCP 协议的 Cubic 拥塞控制算法,具体看参照QUCI原理分析文章)

http/3同一连接数据并行
http/3同一连接数据并行
  • 共享连接并发(实现了同一物理连接上的多个逻辑数据流并行)
  • Quic的丢包重传机制(数据包编号严格递增保证唯一+stream offset保证有序传输)

http/3丢包重传
http/3丢包重传

参考资料

HTTP0.9 docs:https://www.w3.org/Protocols/HTTP/AsImplemented.html

HTTP1.0 RFC1945:https://tools.ietf.org/html/rfc1945

HTTP1.1 RFC2068:https://www.ietf.org/rfc/rfc2068.txt

HTTP1.1 RFC2616:https://www.ietf.org/rfc/rfc2616.txt

HTTP2 RFC7540:https://tools.ietf.org/html/rfc7540

HTTP2 HPACK RFC7541:https://tools.ietf.org/html/rfc7541

HTTP2:https://http2.github.io/

SPDY:https://tools.ietf.org/html/draft-mbelshe-httpbis-spdy-00

HTTP2 akamai demo:https://http2.akamai.com/

QUIC:https://datatracker.ietf.org/wg/quic/about/

QUIC-org:https://quicwg.org/

QUIC draft:https://tools.ietf.org/wg/quic/

Google QUIC:https://www.chromium.org/quic

QUIC docs:https://docs.google.com/document/d/1g5nIXAIkN_Y-7XJW5K45IblHd_L2f5LTaDUDwvZ5L6g/edit

QUIC原理分析:https://baijiahao.baidu.com/s?id=1588818989895632410&wfr=spider&for=pc

没有更多了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
写得很详细!!
写得很详细!!
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
QUIC协议原理浅解
导语 | QUIC,HTTP3 的传输层实现,是近年来诞生的非常强悍的传输协议,它利用 UDP 解决了当前基于 TCP 协议的 HTTP 的许多问题,提升了在弱网环境下的网络通信体验,下面让我们来一探究竟。文章作者:江炜隆,腾讯云CDN产品研发工程师。 一 、QUIC究竟是什么 1. 什么是QUIC? QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于 UDP 的传输协议,它实现了 TCP + HTTPS + HTTP/2 的功能,目的是保证可靠性的同时降低
腾讯云开发者
2021/03/16
4.1K0
啊,http2还没搞明白,http3又来了?
这就有点慌了,连 HTTP2 都还没搞明白, HTTP3 已经出来了。但 HTTP3 会受到关注也是有理由的:它速度很快。
运维部落
2020/09/04
1.1K0
啊,http2还没搞明白,http3又来了?
科普:QUIC 协议原理分析
本文将主要介绍 QUIC 协议产生的背景和核心特性。
腾讯技术工程官方号
2018/01/10
9.1K1
科普:QUIC 协议原理分析
弱网不弱-TQUIC助力业务提速30%
导语 | 腾讯sTGW如何助力核心业务用户登录耗时降低30%,下载场景500ms内请求成功率从HTTPS的60%提升到90%?本文将对此进行详细介绍,为大家分享腾讯移动端APP如何在弱网、跨网场景下同样取得媲美正常网络的用户体验。 (作者:腾讯云网关sTGW团队dalek) 腾讯核心业务用户登录耗时降低30%,下载场景500ms内请求成功率从HTTPS的60%提升到90%,腾讯的移动端APP在弱网、跨网场景下取得媲美正常网络的用户体验。这是腾讯网关sTGW团队打造的TQUIC网络协议栈在实时通信、音
腾讯云开发者
2021/12/01
1.8K0
【HTTP】843- 揭秘 HTTP2
前段时间组内小伙伴遇到了一个问题:一个页面上有 10 个视频,因为浏览器对 tcp 连接数的限制,导致同时只能加载 6 个视频。考虑到http2协议的多路复用可以解决这个问题,特地整理此篇关于http2的内容和大家分享。
pingan8787
2021/01/28
1.7K0
【HTTP】843- 揭秘 HTTP2
WebTransport初探
导语 | 如今通过网络进行实时音视频通话已经越来越流行,对于音视频领域的技术要求也越来越高,许多网络技术应运而生,如WebRTC,QUIC,HTTP3,WebTransport,WebAssembly,WebCodecs等。想必很多人有疑问,这些技术为什么会产生?有哪些发展历史?这些问题在本文都能找到参考。 QUIC简析 1. 什么是QUICQUIC(Quick UDP Internet Connections)是一种新的“更快”的通用网络传输协议。相比于TCP和TLS,QUIC提供了许多改进来提升网络传
腾讯云音视频
2022/03/04
2.5K0
《透视HTTP协议》:快速了解HTTPS/HTTP2/HTTP3 的变动改进点
https被认为是通信安全的http,除了http多了s和默认端口改成了443之外,其他都是沿用的http(除了明文和不安全),最主要的改变就是http是over tcp,而https是 https over ssl over tcp。安全的特性都是ssl做的
小柔
2024/05/15
7180
《透视HTTP协议》:快速了解HTTPS/HTTP2/HTTP3 的变动改进点
HTTP 3规范正式发布
6月6日,IETF QUIC、比利时的HTTP工作组成员Robin Mark在Twitter上宣布: 历时 5 年,HTTP 3终于被标准化为RFC 9114。将与RFC 9204(QPACK header 压缩)和 RFC 9218 (可扩展的优先级)一起开启 Web 的新篇章!
xiangzhihong
2022/06/14
1.1K0
HTTP 3规范正式发布
终、《图解HTTP》读书笔记 - 汇总篇(总结)
又一本网络基础的书啃完了,这本书建议结合[[《网络是怎么样连接的》读书笔记 - 汇总篇]]这一篇读书笔记食用(当然也可以直接看原书)。
阿东
2022/12/06
6770
终、《图解HTTP》读书笔记 - 汇总篇(总结)
深入剖析HTTP3协议
自2017年起HTTP3协议已发布了34个Draft,推出在即,Chrome、Nginx等软件都在跟进实现最新的草案。本文将介绍HTTP3协议规范、应用场景及实现原理。
陶辉
2023/10/18
2.5K0
深入剖析HTTP3协议
【计网】从HTTP/0.9 到 HTTP/3
为什么会出现 HTTP 协议,从 HTTP1.0 到 HTTP3 经历了什么?HTTPS 又是怎么回事?
JuneBao
2022/10/26
7280
【计网】从HTTP/0.9 到 HTTP/3
HTTP - HTTP2 面试题
根据网络上的常见面试题进行收集,基本能应付大部分的场景,HTTP大部分是八股,所以直接开始背书即可。
阿东
2022/12/06
7670
HTTP - HTTP2 面试题
甩掉TCP协议的HTTP/3,真的很牛吗?
与HTTP/1.0相比,HTTP/1.1主要有两个新的特性:keepalive和pipelining。
jeanron100
2023/09/18
7830
甩掉TCP协议的HTTP/3,真的很牛吗?
HTTP/3发布了,我们来谈谈HTTP/3
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/17
7140
HTTP/3发布了,我们来谈谈HTTP/3
QUIC:下一代通信协议
一. 前言 自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。 鉴于 QUIC 具备“0RTT 建连”、“支持连接迁移”等诸多优势,即将成为下一代互联网协议。 阅读完本文你将了解和学习到: HTTP协议发展史 HTTP各版本存在的问题,以及各版本解决了哪些问题 QUIC协议特性 再也不怕面试官问HTTP相关的问题了! 行文思路: 从历史使用最广泛的HTTP1.1开始,介绍各版本存在的问题,以及新版本如何解决旧版本存在的问题 二. HTTP协议发展史 HTTP
QQ音乐前端团队
2021/11/22
1K0
HTTP3 RFC 9114 发布,深入剖析HTTP3协议
HTTP3是在保持QUIC稳定性的同事使用UDP来实现高速度, 同时又不会牺牲TLS的安全性.
肉眼品世界
2022/06/15
1.2K0
HTTP3 RFC 9114 发布,深入剖析HTTP3协议
前端应该知道的 HTTP 知识
HTTP 是由蒂姆·伯纳斯-李(TimBerners—Lee)于1989年在欧洲核子研究组织(CERN)所发起
GopalFeng
2020/09/24
5960
前端应该知道的 HTTP 知识
一文读懂 HTTP/1HTTP/2HTTP/3
作者:charryhuang,腾讯 CSIG 前端开发工程师 从 1989 年万维网(www)诞生,HTTP(HyperText Transfer Protocol)经历了众多版本迭代,WebSocket 也在期间萌芽。1991 年 HTTP0.9 被发明。1996 年出现了 HTTP1.0。2015 年 HTTP2 正式发布。2020 年 HTTP3 或能正式使用。以下将会简单介绍。 HTTP1.1 与 HTTP2 HTTP1.1 的缺陷 高延迟 — 队头阻塞(Head-Of-Line Blocki
腾讯技术工程官方号
2020/02/10
1.5K0
一文读懂 HTTP/1HTTP/2HTTP/3
二、《图解HTTP》- HTTP协议历史发展(重点)
这一章节基本上大部分为个人扩展,因为书中的内容讲的实在是比较浅。本文内容非常长,另外哪怕这么长也只是讲到了HTTP协议的一部分而已,HTTP协议本身十分复杂。
阿东
2022/08/12
6800
二、《图解HTTP》- HTTP协议历史发展(重点)
万字图解 | 深入揭秘HTTP工作原理
大家好,我是「云舒编程」,今天我们来聊聊计算机网络面试之-(应用层HTTP)工作原理。
公众号 云舒编程
2024/01/25
1.2K0
万字图解 | 深入揭秘HTTP工作原理
相关推荐
QUIC协议原理浅解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档