编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

了解HTTP / 2的4大支柱(1分钟看懂http1与http2)

wxchong 2024-07-09 23:21:57 开源技术 29 ℃ 0 评论

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

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

纠结的Web服务刚刚结束了所有其HTTP / 1.1服务器的退役。 现在一切都已建立并在快速的HTTP / 2服务器上运行。

Devin和Ken一直在使用h2load测试工具运行基准测试,以测量HTTP / 2吞吐率。 他们已经在其他博客文章中报告了他们的发现。 总体而言,结果令人印象深刻。

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

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

"酷!" 德文说。

"有龙!" 肯假笑。

在此"纠结的Web服务"情节的制作中,没有minifig角色受到伤害。

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

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

· 持续的会议

· 多路复用流

· 标头压缩,以及

· 优先次序

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

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

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

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

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

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

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

"多路复用流很棒," Devin说道。"听起来它有可能改变我们对Web包装和交付的思考方式。"

"当然," Ernesto说道,然后才进入完整的演讲模式。 "报头压缩通过三种方式减少了通信开销:通过索引报头名称,重用不变的报头值以及将交换打包为二进制格式。

"带索引的标题名称意味着可以将常用的标题名称表示为一个小数字,而不是一个长字符串。 例如,cookie只是变成索引号32。

"重用不变的标头值是一种优化,其中标头值在第一个请求期间添加到动态表中,并在第二个请求重用相同的值时由索引值引用。 因此,例如,如果将Cookie标头值AB12CD34EF5600AABBCC与100个资源请求一起发送,则仅第一个请求会产生20字节的开销。 其他99个请求仅传递为其建立的动态表的索引号。

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

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

最后,优先级排序是一种允许对响应的调度进行微调的方案。 鉴于请求不再被行首瓶颈所阻止,因此可能同时存在许多正在运行的请求。

"为了计划这些资源中的哪些需要更早传输,以及哪些资源可以延迟,HTTP / 2允许使用加权机制对它们进行优先级排序。 可以为每个响应分配一个权重,范围从1(低优先级)到256(高优先级),从而使传输顺序独立于源文档定义的顺序。

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

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

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

"酷!" 德文印象深刻。 他喜欢这种细节。

"但是投机性推销呢?" 肯问:"那不是您要研究的内容吗?"

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

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


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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表