Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >让面试官颤抖的 HTTP 2.0 协议面试题

让面试官颤抖的 HTTP 2.0 协议面试题

作者头像
崔庆才
发布于 2018-10-08 06:26:07
发布于 2018-10-08 06:26:07
2.2K0
举报
文章被收录于专栏:进击的Coder进击的Coder

Http协议,对于拥有丰富开发经验的程序员来说简直是信手拈来,家常便饭。虽然天天见,但是对于http协议的问题,可能很多人在没有积极准备的情况下,不一定能很好的回答出来。

今天,我们就来讲讲http 2.0和之前版本的区别。

一、HTTP定义

HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。

二、HTTP发展史

三、HTTP 2.0 vs 1.0 性能

HTTP 2.0 的出现,相比于 HTTP 1.x ,大幅度的提升了 web 性能。

这是 Akamai 公司建立的一个官方的演示,用以说明 HTTP/2 相比于之前的 HTTP/1.1 在性能上的大幅度提升。 同时请求 379 张图片,从Load time 的对比可以看出 HTTP/2 在速度上的优势。

四、HTTP 2.0 和 1.1 区别

后面我们将通过几个方面来说说HTTP 2.0 和 HTTP1.1 区别,并且和你解释下其中的原理。

区别一:多路复用

多路复用允许单一的 HTTP/2 连接同时发起多重的请求-响应消息。看个例子:

整个访问流程第一次请求index.html页面,之后浏览器会去请求style.css和scripts.js的文件。左边的图是顺序加载两个个文件的,右边则是并行加载两个文件。

我们知道HTTP底层其实依赖的是TCP协议,那问题是在同一个连接里面同时发生两个请求响应着是怎么做到的?

首先你要知道,TCP连接相当于两根管道(一个用于服务器到客户端,一个用于客户端到服务器),管道里面数据传输是通过字节码传输,传输是有序的,每个字节都是一个一个来传输。

例如客户端要向服务器发送Hello、World两个单词,只能是先发送Hello再发送World,没办法同时发送这两个单词。不然服务器收到的可能就是HWeolrllod(注意是穿插着发过去了,但是顺序还是不会乱)。这样服务器就懵b了。

接上面的问题,能否同时发送Hello和World两个单词能,当然也是可以的,可以将数据拆成包,给每个包打上标签。发的时候是这样的①H ②W ①e ②o ①l ②r ①l ②l ①o ②d。这样到了服务器,服务器根据标签把两个单词区分开来。实际的发送效果如下图:

要实现上面的效果我们引入一个新的概念就是:二进制分帧。

二进制分帧层 在 应用层(HTTP/2)和传输层(TCP or UDP)之间。HTTP/2并没有去修改TCP协议而是尽可能的利用TCP的特性。

在二进制分帧层中, HTTP/2 会将所有传输的信息分割为帧(frame),并对它们采用二进制格式的编码 ,其中 首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。

HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。

HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。

通过下面两张图,我们可以更加深入的认识多路复用:

HTTP/1

HTTP/2

总结下:多路复用技术:单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大;由于减少TCP 慢启动时间,提高传输的速度

区别二:首部压缩

为什么要压缩?在 HTTP/1 中,HTTP 请求和响应都是由「状态行、请求 / 响应头部、消息主体」三部分组成。一般而言,消息主体都会经过 gzip 压缩,或者本身传输的就是压缩过后的二进制文件(例如图片、音频),但状态行和头部却没有经过任何压缩,直接以纯文本传输。

随着 Web 功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输 UserAgent、Cookie 这类不会频繁变动的内容,完全是一种浪费。

我们再用通俗的语言解释下,压缩的原理。头部压缩需要在支持 HTTP/2 的浏览器和服务端之间。

  • 维护一份相同的静态字典(Static Table),包含常见的头部名称,以及特别常见的头部名称与值的组合;
  • 维护一份相同的动态字典(Dynamic Table),可以动态的添加内容;
  • 支持基于静态哈夫曼码表的哈夫曼编码(Huffman Coding);

静态字典的作用有两个:

1)对于完全匹配的头部键值对,例如 “:method :GET”,可以直接使用一个字符表示;

2)对于头部名称可以匹配的键值对,例如 “cookie :xxxxxxx”,可以将名称使用一个字符表示。

HTTP/2 中的静态字典如下(以下只截取了部分,完整表格在这里):

同时,浏览器和服务端都可以向动态字典中添加键值对,之后这个键值对就可以使用一个字符表示了。需要注意的是,动态字典上下文有关,需要为每个 HTTP/2 连接维护不同的字典。在传输过程中使用,使用字符代替键值对大大减少传输的数据量。

区别三:HTTP2支持服务器推送

服务端推送是一种在客户端请求之前发送数据的机制。当代网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP/1.x中这些资源每一个都必须明确地请求。这可能是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。

为了改善延迟,HTTP/2引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前。一个服务器经常知道一个页面需要很多附加资源,在它响应浏览器第一个请求的时候,可以开始推送这些资源。这允许服务端去完全充分地利用一个可能空闲的网络,改善页面加载时间。

本文转载自:Java技术栈

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

本文分享自 进击的Coder 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java核心面试宝典】Day19、你猜HTTP协议会有什么面试题?
HTTP和HTTPS大家都知道吧?那你知道他们的连接方式、区别、加密方式等等吗?那今天这篇我就带大家来总结一下这其中会有哪些常见的面试题呢?
灰小猿
2021/09/23
3640
HTTP都到3.0了,你还不了解1和2吗?
HTTP 协议一共有四个阶段比较重要的阶段,分别是 0.9/1/2/3,其中1又分为1.0和1.1。
用户9899350
2022/07/29
5150
HTTP都到3.0了,你还不了解1和2吗?
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
CBeann
2023/12/25
6280
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
Android网络面试题之Http1.1和Http2.0
1) 最大变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。
AntDream
2024/06/26
960
Android网络面试题之Http1.1和Http2.0
HTTP/2 学习
Akamai http2 demo 这个 Akamai 公司建立的官方 demo,左右两边分别为 HTTP/1.1 和 HTTP/2,两边都同时请求 300 多张图片,从加载时间可以看出 HTTP/2 在速度上的绝对优势。
李振
2021/11/26
5060
热点面试题:简述 http3.0~http1.0 分别有什么改进?
1.无法复用: 每次发送请求,都需要进行一次TCP连接,而TCP的连接释放过程又是比较耗时的。
沉浸式趣谈
2024/03/13
1900
热点面试题:简述 http3.0~http1.0 分别有什么改进?
http协议的优化历程
http,超文本传输协议,工作在应用层。客户端和服务端都需要通过http进行通信,除了业务需要的数据,还有大量的隐私数据,所以在数据量越来越大的同时也要兼顾安全问题。
不作声
2021/03/05
3070
关于网络请求的面试题总结
本文首发于掘金,各位可以通过点击文章下方的阅读原来来访问原文地址 网络相关的知识也是面试时经常会被问到的问题,面试官很有必要确认面试者是否只会使用$.ajax()方法,还是真正了解网络请求的原理。
用户1687375
2018/06/08
1.1K0
面试题:HTTP1.1和 HTTP2.0的区别?
HTTP(Hyper Text Transfer Protocol)是互联网上应用最广泛的协议之一。其升级版本 HTTP/1.1 和 HTTP/2.0 在性能、安全等方面有着不少差距,如下所示:
GeekLiHua
2025/01/21
950
【面试题】HTTP知识点整理(附答案)
HTTP/1 的几种优化可以弃用: 合并文件、内联资源、雪碧图、域名分片对于 HTTP/2 来说是不必要的,使用 h2 尽可能将资源细粒化,文件分解地尽可能散,不用担心请求数多
木子星兮
2020/07/17
1.4K0
【面试题】HTTP知识点整理(附答案)
Java 9和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?
关于HTTP/2,最近你可能没少听到过他。首先,如果你了解过Java 9的特性,那么你会发现在Java9中,提供了新的方式来处理HTTP调用,提供了新的HTTP Client,将替代HttpURLConnection,并提供对WebSocket和HTTP/2的支持。还有前两天刚刚发布的Spring Boot 2.0 的新特性中,也会看到,Spring Boot 2.0支持的Web容器中Tomcat、Undertow和Jetty均已支持HTTP/2。
纯洁的微笑
2019/09/05
1.4K0
Java 9和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?
HTTP - HTTP2 面试题
根据网络上的常见面试题进行收集,基本能应付大部分的场景,HTTP大部分是八股,所以直接开始背书即可。
阿东
2022/12/06
7460
HTTP - HTTP2 面试题
谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。
张炳
2019/08/02
3.8K0
谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
什么是http2.0?
上图:设置Connection:Keep-Alive,保持连接在一段时间内不断开。
小灰
2022/07/05
2.8K0
什么是http2.0?
Http/2.0
http2.0是一种安全高效的下一代http传输协议。安全是因为http2.0建立在https协议的基础上,高效是因为它是通过二进制分帧来进行数据传输。正因为这些特性,http2.0协议也在被越来越多的网站支持。据统计,截止至2018年8月,已经有27.9%的网站支持http2.0。
大公爵
2022/11/02
1K0
Http/2.0
HTTP HTTPS HTTP1.1 HTTP2 HTTP3
金山银四, 是一个骚动的季节。 昨天在某大厂面试中,就被问到"你用过HTTPS没?" 这种直白的问题,回答的并不流畅,结合最近我在写gRPC, 索性梳理一下 HTTP HTTPS HTTP1.1 HT
有态度的马甲
2021/03/12
2.9K0
HTTP HTTPS HTTP1.1 HTTP2 HTTP3
Http1.x与Http2.0的区别
随着Http协议发展的20年间,从物理带宽、CPU、内存,到软件都有了很大的提升,而原来的协议也具有了很大的局限性:
None_Ling
2019/05/24
1.6K0
HTTP/3 竟然基于 UDP,HTTP 协议这些年都经历了啥?
花下猫语:若说最为人知的网络协议,大概非 HTTP 协议莫属。但是,关于这个协议的更多细节,相信很多人都答不上来。现在它已经发展到第三代了,而且出现了重大的转变。今天分享的这篇文章,主要从 HTTP 发展进化的角度,介绍了这个协议的底层原理以及设计思想,希望对你有所帮助。
Python猫
2019/04/23
1.6K0
HTTP/3 竟然基于 UDP,HTTP 协议这些年都经历了啥?
【大厂面试】腾讯面试,你真的懂HTTP吗?
大彬:嗯,HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。协议实际上就是双方约定好的格式,确保双方都能理解这种格式。
程序员大彬
2022/02/15
3780
51 张图助你彻底掌握 HTTP 协议
如果说 TCP/IP 协议是互联网通信的根基,那么 HTTP 就是其中当之无愧的王者,小到日常生活中的游戏,新闻,大到双十一秒杀等都能看到它的身影,据 NetCraft 统计,目前全球至少有 16 亿个网站、2 亿多个独立域名,而这个庞大网络世界的底层运转机制就是 HTTP,可以毫不夸张的说,无 HTTP 不通信!
kunge
2021/01/13
6700
相关推荐
【Java核心面试宝典】Day19、你猜HTTP协议会有什么面试题?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档