Loading [MathJax]/jax/output/CommonHTML/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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
单细胞分析揭示葡萄膜黑色素瘤新的进化复杂性
每个人的时间精力有限,必须优先阅读相关文献,开设这个栏目也是希望为大家推荐高质量的单细胞相关文献。如果大家对单细胞转录组感兴趣可以关注一下,哪怕每天只学一点点,积土成山,积水成渊。
生信技能树jimmy
2020/05/26
1.8K0
单细胞分析揭示葡萄膜黑色素瘤新的进化复杂性
单细胞亚群比例变化和表达量差异分析
我们以Nov 2020的文献:《VEGF-B Promotes Endocardium-Derived Coronary Vessel Development and Cardiac Regeneration》为例,链接是:https://www.ahajournals.org/doi/10.1161/CIRCULATIONAHA.120.050635
生信技能树
2022/06/08
2.7K0
单细胞亚群比例变化和表达量差异分析
外周血单细胞RNA测序揭示阿尔茨海默病的免疫细胞特征
文章标题:《Single-Cell RNA Sequencing of Peripheral Blood Reveals Immune Cell Signatures in Alzheimer’s Disease》
生信技能树jimmy
2023/12/26
5520
外周血单细胞RNA测序揭示阿尔茨海默病的免疫细胞特征
人类外周血的多维单细胞分析揭示了衰老和虚弱的免疫系统的特征
文章标题:《Multidimensional single-cell analysis of human peripheral blood reveals characteristic features of the immune system landscape in aging and frailty》
生信技能树jimmy
2023/12/05
7000
人类外周血的多维单细胞分析揭示了衰老和虚弱的免疫系统的特征
晚期胆道癌微环境中不同免疫群体的单细胞图谱
文章标题:《Single-cell atlas of diverse immune populations in the advanced biliary tract cancer microenvironment》
生信技能树jimmy
2023/12/26
2740
晚期胆道癌微环境中不同免疫群体的单细胞图谱
单细胞RNA测序分析人高级别浆液性卵巢癌的组织结构
文章标题:《Single-Cell RNA Sequencing Reveals the Tissue Architecture in Human High-Grade Serous Ovarian Cancer》
生信技能树jimmy
2024/01/02
4600
单细胞RNA测序分析人高级别浆液性卵巢癌的组织结构
数据分析有错误并不可怕,造假才不可饶恕
这个文章标题短小精悍:《Choroid plexus mast cells drive tumor-associated hydrocephalus》,相关数据在:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE207546
生信技能树
2024/01/17
3650
数据分析有错误并不可怕,造假才不可饶恕
单细胞水平上解析人肝硬化的纤维化生态位
文章标题:《Resolving the fibrotic niche of human liver cirrhosis at single-cell level 》
生信技能树jimmy
2023/09/19
3940
单细胞水平上解析人肝硬化的纤维化生态位
异常伤口愈合小鼠模型中单核细胞对异位骨化的调控
文章标题:《Regulation of heterotopic ossification by monocytes in a mouse model of aberrant wound healing》
生信技能树jimmy
2024/01/02
2690
异常伤口愈合小鼠模型中单核细胞对异位骨化的调控
人类妇科恶性肿瘤的多组学单细胞景观
文章标题:《A multi-omic single-cell landscape of human gynecologic malignancies》
生信技能树jimmy
2024/03/04
2580
人类妇科恶性肿瘤的多组学单细胞景观
如何整理好10x技术的单细胞转录组的表达量矩阵3文件
就会发现,matrix.mtx文件里面的33694、2049、1878957数值,分别是细胞数量,基因数量,以及有表达量的值的数量(全部的值应该是33694X2049接近7000万,但是有值的仅仅是不到200万,所以单细胞矩阵里面只有3%左右的值大于0 )。每个10X样本都是走流程拿到10x单细胞转录组数据的3个文件的表达矩阵。
生信技能树
2024/11/21
1330
如何整理好10x技术的单细胞转录组的表达量矩阵3文件
Eninostat在HER2阳性乳腺肿瘤微环境中作用
文章标题:《Entinostat decreases immune suppression to promote anti-tumor responses in a HER2+ breast tumor microenvironment》
生信技能树jimmy
2024/03/06
2850
Eninostat在HER2阳性乳腺肿瘤微环境中作用
中枢神经系统免疫细胞的单细胞RNA转录组分析
文章标题:《Single-cell RNA transcriptome analysis of CNS immune cells reveals CXCL16/CXCR6 as maintenance factors for tissue-resident T cells that drive synapse elimination》
生信技能树jimmy
2024/03/18
1420
中枢神经系统免疫细胞的单细胞RNA转录组分析
给你的单细胞umap图加个cell杂志同款的圈
+CPI colitis全称:Check point inhibitor-induced colitis
生信技能树
2025/01/22
3120
给你的单细胞umap图加个cell杂志同款的圈
多组学来量化原位和侵袭的肢端黑色素瘤差异
黑色素瘤的分期通常基于肿瘤的厚度(Breslow 厚度)、是否有溃疡、淋巴结受累情况以及是否有远处转移。分期系统如 AJCC(美国癌症联合委员会)TNM 分期系统,会使用 T(肿瘤大小)、N(淋巴结受累情况)和 M(远处转移)来描述黑色素瘤的进展。
生信技能树jimmy
2024/05/21
1230
多组学来量化原位和侵袭的肢端黑色素瘤差异
使用seurat3的merge功能整合8个10X单细胞转录组样本
本教程演示的数据来源于发表在2017年10月的NC文章:Differentiation dynamics of mammary epithelial cells revealed by single-cell RNA sequencing 用10X单细胞转录组测序来探索小鼠的乳腺发育情况,包括了4个发育阶段: nulliparous (NP) 未怀孕时期 day 14.5 gestation (G) 妊娠期第14.5天 day 6 lactation (L) 哺乳期第6天 11 days post nat
生信技能树jimmy
2020/03/30
14.9K0
单细胞专题 | 6.单细胞下游分析——不同类型的数据读入
单细胞专题 | 1.单细胞测序(10×genomics技术)的原理 单细胞专题 | 2.如何开始单细胞RNASeq数据分析 单细胞专题 | 3.单细胞转录组的上游分析-从BCL到FASTQ 单细胞专题 | 4.单细胞转录组的上游分析-从SRA到FASTQ 单细胞专题 | 5.单细胞转录组的上游分析-从FASTQ到count矩阵
DoubleHelix
2022/12/16
4.1K0
单细胞专题 | 6.单细胞下游分析——不同类型的数据读入
胃癌单细胞数据集GSE163558复现(一):数据下载、整理与读取
Hello小伙伴们大家好,我是生信技能树的小学徒”我才不吃蛋黄“。接下来的一段时间里,将由我开启一个新的学徒分享系列,给大家系统整理单细胞测序的代码。此系列包括但不限于以下内容:数据下载与读取;质控和去批次;降维聚类;分群注释;差异分析;富集分析;拟时序分析;细胞通讯;CopyKAT。
生信技能树jimmy
2024/06/13
2.2K0
胃癌单细胞数据集GSE163558复现(一):数据下载、整理与读取
肿瘤单细胞转录组的第一层次降维聚类分群
主要的分析就是第一层次降维聚类分群,然后大概认识一下有什么亚群,以及比例差异情况,最后就是把每个亚群都细分一下做同样的分析即可。
生信技能树
2023/11/16
3820
肿瘤单细胞转录组的第一层次降维聚类分群
人类纹状体胶质细胞在AD和PD特异性神经变性的差异
文章标题:《Human striatal glia differentially contribute to AD- and PD-specific neurodegeneration》
生信技能树jimmy
2024/04/01
1720
人类纹状体胶质细胞在AD和PD特异性神经变性的差异
推荐阅读
相关推荐
单细胞分析揭示葡萄膜黑色素瘤新的进化复杂性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档