Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么叫 HTTP/2 ,而不是 HTTP/2.0 ?

为什么叫 HTTP/2 ,而不是 HTTP/2.0 ?

作者头像
微观技术
发布于 2021-11-08 07:27:18
发布于 2021-11-08 07:27:18
78700
代码可运行
举报
文章被收录于专栏:微观技术微观技术
运行总次数:0
代码可运行

大家好,我是Tom哥~

今天跟大家聊聊下 HTTP协议,欢迎留言讨论

互联网时代,足不出户,点点鼠标就可以轻松了解外面的世界变化,这一切得益于网络传输数据。

我们都知道网络有7层模型,从底层到上层依次是:物理层数据链路层网络层传输层会话层表示层应用层

越往上,越接近用户习惯,更容易被用户直观了解。

今天讲的 HTTP 协议属于应用层协议,也是互联网广泛使用的基础协议之一。

一、 HTTP/0.9

0.9 版本是HTTP最早的版本,诞生于 1991 年,比较简单。

1、只支持 GET 请求,没有请求头。每次请求都要单独创建一个TCP连接,复用性差,性能不高

2、服务端响应的数据只能是 HTML格式,服务器发送完毕,会关闭TCP连接。如果请求的页面不存在,也不会返回任何错误码。

当时,互联网刚起步,页面展现形式更多是文本为主,能满足基本需求。随着用户需求的多样化,对展示形态和性能也提出了更高要求,HTTP协议也开始了慢慢的升级之路。

二、 HTTP/1.0

1996年,HTTP/1.0 发布,相比之前版本增加了很多特性。

1、请求和响应增加了头信息(header),用来描述一些元数据,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Content-Type 让响应数据不只限于超文本
Expires、Last-Modified 缓存
Authorization 身份认证
Connection: keep-alive 支持长连接,但非标准

2、请求方法,除了 GET,还增加了 POSTHEAD命令,丰富了互动方式

3、丰富了传输内容的格式,有文本、图像、视频、二进制文件

4、请求时增加 HTTP 协议版本,响应端增加状态码。

缺点:

主要还是连接复用问题,每个TCP连接只能发送一个请求。当数据发送完毕后,连接就会关闭。由于TCP建立连接,需要三次握手,所以性能会比较差。

为了缓解这个问题,请求头引入一个非标准的Connection字段:Connection: keep-alive,要求服务器不要关闭TCP连接,从而达到复用效果。

当然,这个不是标准字段,只是一个临时方案。

三、 HTTP/1.1

1997年,HTTP/1.1 版本发布。进一步完善了HTTP协议,也是目前最流行的版本,一直活跃至今。

1、默认支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟

2、管线化技术。支持多个 HTTP 请求批量发送,不用排队,这就解决了 HTTP 队头阻塞问题。但批量发送的 HTTP 请求,必须按照发送的顺序返回响应

3、流式渲染,响应端可以不用一次返回所有数据,可以将数据拆分成多个模块,产生一块数据,就发送一块数据,这样客户端就可以同步对数据进行处理,减少响应延迟,降低白屏时间。

4、请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接

5、增加 Host 头,实现了虚拟主机技术,将一台服务器分成若干个主机,这样就可以在一台服务器上部署多个网站了。通过配置 Host 的域名和端口号,即可支持多个 HTTP 服务

6、头部增加一些缓存字段,如 E-Tag、Cache-Control 等

7、新增了24个错误状态响应码,如 409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

小结:

请求和响应成对出现,顺序串行。如果按QPS来理解的话,最大的并发数只能是 1

四、 HTTP/2

HTTP/2 诞生于 2015 年,最大特点是基于二进制的特性,对 HTTP 传输效率进行了深度优化。

新增了哪些特性?

1、二进制帧

HTTP/2 将一个 HTTP 请求划分为 3 个部分:二进制帧、消息、数据流

  • 帧:一段二进制数据,是 HTTP/2 传输的最小单位
  • 消息:逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成
  • 数据流:连接中的一个虚拟信道,可以同时承载一条或多条消息,支持双向承载

一个TCP连接上,承载着双向消息,一条消息包含多个二进制帧,每个帧都有唯一标识,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装,这样就实现了数据传输。

2、多路复用

HTTP/1.1 中的 KeepAlive 长连接虽然可以传输很多请求,但它的吞吐量很低,因为在发出请求等待响应的那段时间里,这个长连接不能做任何事!而 HTTP/2 通过 Stream 这一设计,允许请求并发传输。因此,HTTP/1.1 时代 Chrome 通过 6 个连接访问页面的速度,远远比不上 HTTP/2 单连接的速度。

HTTP/2 的并发性能比 HTTP/1.1 通过 TCP 连接实现并发要高。这是因为,当 HTTP/2 实现 100 个并发 Stream 时,只经历 1 次 TCP 握手、1 次 TCP 慢启动以及 1 次 TLS 握手,但 100 个 TCP 连接会把上述 3 个过程都放大 100 倍!

3、头部压缩

HTTP/1.1 的头部字段包含大量信息,而且每次请求都得带上,占用了大量的带宽。

HTTP/2 静态表仅用一个数字来表示,其中,映射数字与字符串对应关系的表格,被写死在 HTTP/2 实现框架中。这样的编码效率非常高,

什么是静态表呢?HTTP/2 将 61 个高频出现的头部,比如描述浏览器的 User-Agent、GET 或 POST 方法、返回的 200 SUCCESS 响应等,分别对应 1 个数字再构造出 ”字典“,并写入 HTTP/2 客户端与服务端,用索引号表示重复的字符串,可以达到 50%~90% 的高压缩率。

4、请求优先级

由于采用多路复用,多个请求会同时产生多个数据流,数据流中有一个优先级的标识,服务端根据这个标识决定响应的优先顺序。

流 ID 不能重用,只能顺序递增,客户端发起的 ID 是奇数,服务器端发起的 ID 是偶数;

5、服务器端推送

HTTP/1.1 不支持服务器主动推送消息,因此当客户端需要获取通知时,只能通过定时器不断地轮询拉取消息。HTTP/2 的消息推送结束了无效率的定时拉取,节约了大量带宽和服务器资源。

例如:HTTP/1.1 中请求一个页面时,浏览器会先发送一个 HTTP 请求,然后得到响应的 HTML 内容并开始解析,如果发现有<script src="xxxx.js">标签,则会再次发起 HTTP 请求获取对应的 JS 内容。而 HTTP/2 可以在返回 HTML 的同时,将需要用到的 JS、CSS 等内容一并返回给客户端,当浏览器解析到对应标签时,也就不需要再次发起请求了。

小结:

通过二进制帧流模式,打破之前的”请求 - 应答“串行模式,单个TCP连接上支持并发请求、响应,多路复用大大提升了网络吞吐量。

HTTP/2 作为升级版,为了与之前的版本保持兼容,对头字段、状态码、请求方法等信息都保留不变,降低了学习成本,同时上层应用也可以做到无缝兼容。

小提示: 做软件架构也是一样,设计接口规范时一定要慎之又慎,尽量预留很长一段时间的扩展,后续更多是对里面的逻辑优化重构,对外黑盒,无需感知。

为什么是 HTTP/2 ,而不是HTTP/2.0 ?

HTTP/2 工作组特别给出了解释,以前的1.01.1 容易让人误解,实际使用中难以区分,所以,决定后续的版本不在使用小版本,一律采用大版本。

所以,接下来,你只会看到 HTTP/2HTTP/3 ...

关于加密

为了满足安全性,HTTP/2分别支持”加密“和”明文“,定义两个字符串标识符:“h2”表示加密的 HTTP/2,“h2c”表示明文的 HTTP/2,多出的那个字母“c”的意思是“clear text”。

五、 HTTP/3

HTTP/2 虽然使用“帧”、“流”“多路复用”,没有了“队头阻塞”,但这些优化技巧都是在应用层里,而在底层,也就是 TCP 协议里,还是会发生“队头阻塞”。

HTTP/2 把多个请求 - 响应分解成流,交给 TCP 后,TCP 会再拆成更小的段(segment)依次发送。如果网络不好时,会发生丢包。

TCP为了保证可靠性传输,会有丢包重传机制。这样,其他的包即使已经收到了,也只能放在缓冲区里,这样就又出现了队头阻塞,这是TCP协议固有的。

为了解决这个问题,Google推出了QUIC协议,让 HTTP 跑在 QUIC 上而不是 TCP 上,这个新版本,我们称之为 HTTP/3

HTTP/3 目前还处于草案阶段,离正式发布还有段时间,我们拭目以待...


关于我:前阿里P7技术专家,出过专利,竞赛拿过奖,CSDN博客专家,负责过电商交易、社区生鲜、互联网金融等业务,多年团队管理经验。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微观技术 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
04 网络面经:HTTP 2.0的这些新特性,是时候了解一下了
面试中关于HTTP 2.0的面试题并不多,但基于HTTP 2.0的应用已经很多了,比如谷歌的gRPC框架就是基于HTTP 2.0来提升效率的。同时,HTTP 1.0中的存在的很多缺陷也都在HTTP 2.0中得到了解决。
程序新视界
2021/12/07
3520
04 网络面经:HTTP 2.0的这些新特性,是时候了解一下了
HTTP/3 竟然基于 UDP,HTTP 协议这些年都经历了啥?
花下猫语:若说最为人知的网络协议,大概非 HTTP 协议莫属。但是,关于这个协议的更多细节,相信很多人都答不上来。现在它已经发展到第三代了,而且出现了重大的转变。今天分享的这篇文章,主要从 HTTP 发展进化的角度,介绍了这个协议的底层原理以及设计思想,希望对你有所帮助。
Python猫
2019/04/23
1.6K0
HTTP/3 竟然基于 UDP,HTTP 协议这些年都经历了啥?
图解 HTTP 的前世今生!
Http超文本传输协议同空气一般,感触不到它的存在但是又无处不在,笔者从维基百科摘录了一些Http协议的发展历程的简单信息,一起来看下吧:
范蠡
2020/11/13
8560
图解 HTTP 的前世今生!
什么是http2.0?
上图:设置Connection:Keep-Alive,保持连接在一段时间内不断开。
小灰
2022/07/05
2.8K0
什么是http2.0?
二、《图解HTTP》- HTTP协议历史发展(重点)
这一章节基本上大部分为个人扩展,因为书中的内容讲的实在是比较浅。本文内容非常长,另外哪怕这么长也只是讲到了HTTP协议的一部分而已,HTTP协议本身十分复杂。
阿东
2022/08/12
6700
二、《图解HTTP》- HTTP协议历史发展(重点)
详解:HTTP协议的演进与特性
来源:Linux云计算网络 HTTP的前世传奇 HTTP协议确定之前,伯纳斯-李已经提出了超文本构想,并最终实现了最早期的超文本系统。 1980年——超文本构想的诞生 1980年6月至12月间,伯纳斯-李在日内瓦的CERN(欧洲核子研究中心)担任独立承包人。在那段时间里,他提出了一个构想:创建一个以超文本系统为基础的项目,目的是为了方便研究人员分享及更新讯息。 同时他也开发出了最早的原型系统,并命名为ENQUIRE。这个系统允许一个存储信息片断,并以任何方式链接相关的部分。要找到信息,通过从一张纸到另一张
SDNLAB
2022/08/26
4750
详解:HTTP协议的演进与特性
【HTTP】843- 揭秘 HTTP2
前段时间组内小伙伴遇到了一个问题:一个页面上有 10 个视频,因为浏览器对 tcp 连接数的限制,导致同时只能加载 6 个视频。考虑到http2协议的多路复用可以解决这个问题,特地整理此篇关于http2的内容和大家分享。
pingan8787
2021/01/28
1.6K0
【HTTP】843- 揭秘 HTTP2
HTTP 0.9 HTTP 1.0 HTTP 1.1 HTTP 2.0区别
HTTP协议 :Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP/0.9 HTTP/0.9是第一个版本的HTTP协议,已过时。它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。由于没有协议头,
武培轩
2018/04/18
1.7K0
HTTP/1.1和HTTP/2.0有什么区别
HTTP/1.1 和 HTTP/2.0 是 HTTP 协议的两个版本,它们之间有以下几点区别:
程序员朱永胜
2023/11/15
1.3K0
HTTP1.0、1.1、2.0、3.0的主要区别?HTTP状态码及含义?
HTTP头Connection: keep-alive是什么意思?解决了什么问题?
了凡银河系
2022/08/22
1.1K0
HTTP1.0、1.1、2.0、3.0的主要区别?HTTP状态码及含义?
HTTP/2学习笔记
上图中流A和B没有依赖关系,权重分别为12和4,则A和B获取资源的比例为3/4、1/4;C依赖于D,则D需要等待C后分配资源。
用户1472179
2019/04/01
1.3K0
真正“搞”懂HTTP协议13之HTTP2
  在前面的章节,我们把HTTP/1.1的大部分核心内容都过了一遍,并且给出了基于Node环境的一部分示例代码,想必大家对HTTP/1.1已经不再陌生,那么HTTP/1.1的学习基本上就结束了。这两篇文章,我会和大家一起,学习一下HTTP/2和HTTP/3。
zaking
2023/02/13
8160
真正“搞”懂HTTP协议13之HTTP2
HTTP 和 HTTPS 之间除了安全性区别外,还有哪些区别
HTTP 和 HTTPS 是两种常见的网络协议,它们都是用于在浏览器和服务器之间传输数据的。但是,它们之间也有一些重要的区别,这些区别涉及到数据的安全性、传输性能、使用成本和搜索排名等方面。本文将从以下几个方面来介绍 HTTP 和 HTTPS 的区别,本文内容大纲如下:
wayn
2023/11/28
5240
HTTP 和 HTTPS 之间除了安全性区别外,还有哪些区别
HTTP 2.0 为什么这么设计
HTTP 1.0 是 1996 年发布的,奠定了 web 的基础。时隔三年,1999 年又发布了 HTTP 1.1,对功能上做了扩充。之后又时隔十六年,2015 年发布了 HTTP 2.0。
神说要有光zxg
2022/06/06
3780
HTTP 2.0 为什么这么设计
透视http协议
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
虎妞先生
2023/10/16
2330
透视http协议
http协议
当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。
愤怒的小鸟
2021/01/06
7260
谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。
张炳
2019/08/02
3.8K0
谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
HTTP - HTTP/2 知识点
在《图解HTTP》的读书笔记[《图解HTTP》- HTTP协议历史发展(重点)]当中介绍了一部分关于HTTP/2的内容,但是内容比较简短没有过多深入,本文对于HTTP/2 协议做一个更深入的介绍。
阿东
2022/10/20
1.7K2
HTTP - HTTP/2 知识点
HTTP探索之路 - HTTP 1 / HTTP 2 / QUIC
从1989年万维网(www)诞生,HTTP(HyperText Transfer Protocol)经历了众多版本迭代,WebSocket也在期间萌芽。1991年HTTP/0.9被发明;1996年出现了HTTP/1.0;2015年HTTP/2正式发布;2020年HTTP/3或能正式使用。以下将会简单介绍。 一、HTTP 1.1 与 HTTP 2 1.1 HTTP 1.1 的缺陷 高延迟 — 队头阻塞(Head-Of-Line Blocking) 无状态特性 — 阻碍交互 明文传输 — 不安全
用户1097444
2022/06/29
8330
HTTP探索之路 - HTTP 1 / HTTP 2 / QUIC
Http/2.0
http2.0是一种安全高效的下一代http传输协议。安全是因为http2.0建立在https协议的基础上,高效是因为它是通过二进制分帧来进行数据传输。正因为这些特性,http2.0协议也在被越来越多的网站支持。据统计,截止至2018年8月,已经有27.9%的网站支持http2.0。
大公爵
2022/11/02
1.1K0
Http/2.0
相关推荐
04 网络面经:HTTP 2.0的这些新特性,是时候了解一下了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验