了解HTTP / 2的4大支柱

持久会话,多路复用流,标头压缩和优先级

我们通过艰苦奋斗而学到的Web软件体系结构的基本原理即将进入一个全新的时代。 Node.js后端工程师和前端开发人员需要掌握HTTP / 2如何减少请求/响应往返的延迟并提高整体吞吐量的方法。

纠结的Web服务刚刚结束了所有其HTTP / 1.1服务器的退役。 现在一切都已建立并r T & V % ?在快速W [ 9 q b的HTTP / 2服务器上运行。

DeviS _ i 2 W r hn和Ken一直在使] B ! 0 4 ] `用h2load测试工具运行基准测试,以测量HTTP / 2吞吐率。 他们已经在其他博客文章中报告了他们的发现. e * r O j。 总体而言,结果令人印象深刻。

\"但是什么使它变得如此快呢?\" 埃内斯托问,特别是没有人问。 在早X K ( + # G R ( }上进行混乱之前,他有几分钟的空闲时间,因此他开始阅读IETR [ * R } M rF文档。 (他就是那种书呆子。)这不是轻松阅读。

在站立时,他向德文和肯提到他将研究投机行为。 他宣布:\"; c &我想看看推送是否可以改善我们的网页加载时f A y z 2 o间。\"

\"酷!\" 德文说。

\"有龙!\" 肯假笑。

了解HTTP / 2的4大支柱

在此\"纠结的Web服务\"情节的制作中,没有mig _ b pnifig角色受到伤害。p E x - n

第二天早上,埃z X * ` f $ { D内斯托分享了他到目前为止所学的知识。 他开始从事技术独白,

\"这就是使HTTP / 2如此之快的原因。

持续Y c H r的会议

多路复用流

标头压缩,以及

优先次序

\"这四个功能共同减少了请求/响应往返的延迟。

持久0 } , 9 z #会话允许客户Y H c端和服务器之间的TCP连接保持打开状态,即使网络上没有活动也是如此。 这意味着建立连接的开销仅需要由第一个请求承担。 随o A 8 E ) :后的请求不需要发出DNS查询来解析主机名-大约节省30毫秒。 他们也不需要通过TLS密钥交换协议-节省了大约70毫秒的时间。\", w 7 J

此时,德文打断了他。 \"嗯。C T y ~ O V 我认为HTTP / 1.1通过使用keep-alive标头已经可以使用持久性会话。\"

\"是真的,\"埃内斯托继续说道,\"事实证明它是有益的。 另一方面,HTTP / 2在设计上是持久的,不需要额外的keep-alive标头m Q 4 x - t。\"

\"好的,知道了。\"肯说,用手示意他加快步伐。

埃内斯托继续。 \"复用流允许发出多个请求,而无需等待它们的完整响应。 这消除了HTTP / 1.1的祸根,也是众多珍贵的黑客攻击的根源。

此时,他变得更加活跃。 \"猜猜为什么我们要使用内联数据URL! 猜猜为什么在图像b * - N s精灵上浪费了这么多精力! 猜猜为什么BrowsB ) + k werify和Webpack拥有如此精心的捆绑策略! 对。 HOL瓶颈。 这些黑客中的每一个都打破了所有黑客的最佳性能提升:缓存。 需要更改一个图像,一个JavaScript模块或一个CSS组件-缓存不在窗口内,并且需要检索整个捆绑软件。\"

= b o * g # \"多路复用流很棒,\" Devin说道。\"听起来它有可能改h X ~ ! z + P 8变我们对Web包装和交付的思考方式。\"

\"当8 V , Y f d然,\" Ernesto说道,然后才U / ! W n M J %进入完整的演讲模式。 \"报头压缩通过三种方式减少了通信开销:9 ] ^ $ % x通过索引报头名称,重用不变的报头值以及将交换打包? W 6 ; ~为二进制格式。

\"带索引的标题名称意味着可以将常 t D S用的标题名称表示为一个小数字,而不是一个长字符串。 例如,coo & / C +kie只是变成索引号32。

\"重用不变的标头值是一种优化,其中E I 7 - J * .标头值在第一个请求期; z Y - G间添加到动态表中,并在第二个请求重用相同的值时由索引值引用。 因此,例如,如果将Cookie标头值AB12CD34EF5600AABBC& Z I o % O , .C与100个资源请求一起发送,则仅第一个请求会产生20字节的开销。 其他99个请求仅传递为其建立的动态表的索引号。

\"使用二进{ # v L { *制格式进行压缩意味着可以通过将数字32塞入仅7位来对其进行压缩,并将20字节的cookie AB12CD34EF5600AABBCC压缩为仅16个字节。 这是一种专门为Q I 8 l 8HTTP标头设计的霍夫曼编码,其中每一点都很重要。\"

\" TMI,\" Ken低语,开始变得不耐烦。

最后,优先级排序是一种允许j n 6 b 7 { s ?对响应的调度K 4 6进行B m E 微调的方案。 鉴于请求不再被行首瓶颈所阻止,因此可能同时存在许多正在运行的请求。

\"为- ` n Y , 3了计划这些资源中的哪些需要更早传输,以及哪些资源可以延迟,HTTPt ; f / 2允许使用加权机制b = 0 b % K对它们进行优先级排序。 可以为| 8 s U z g : 2每个响应分配一个权重,范围从1(低优先级+ / ? Y F)到256(高优先级),从而使传输顺序独立于源文档定义的顺序。

\S $ 9 F @ k l"因此,\"德文问道,\"优先级排序可以使样式表和Web字体尽早发送,以防止未样式化文本(FOUT)泛滥。\"

Ernesto继续说道:\"的确如此,并且优先级划分还可以使脚本足够早地发送,以防止用户体验到\"过时的\"应用程序... 您知道,页面的加载位置看起来不错,但是由于JavaScript仍在e h 2 4 V m传输中,因此无法响应用户操作。

了解HTTP / 2的4大支柱

总而言之,持久会话,多B W j $ f a ?路复用流和标头压缩都可以加快页面加载速度。 优先级可以微调传输时间表,以满足网站的特定要求。\"

\"酷!\" 德文印象深刻。 他喜{ w ? p欢这种细节。

\U D"但是投机性p S $推销呢?\" 肯问:\"那不是您要研究的内容吗?\"

\"嗯,是的,\"埃内斯托停顿了一下,\"那是一件整件事。\" 他拖延时间,\"我今天要解决这个问题。\"

埃内斯托还没有走出困境。 但至少他站稳了脚跟。

了解HTTP / 2的4大支柱

(本文翻译自Joe Honton的文章《Understanding the 4 Pillars of HTTP/2》,参考:https://codeburst.io/tws-013-i Q p @ ) xunderstanding-the-4-pillars-of-http2-b93096036ac0)

上一篇

C++哈希表是如何解决冲突的?

下一篇

喀斯特奇景,贵州10个最美的溶洞奇观,你知道几个?

评论已经被关闭。

插入图片
返回顶部