写点什么

HTTP/2 in GO(五)-- 大结局

  • 2019-11-18
  • 本文字数:1859 字

    阅读完需:约 6 分钟

HTTP/2 in GO(五)--大结局

本章作为一个收尾,我来谈一些自己对 HTTP/2 的理解,以及 HTTP/2 的应用前景展望。


通过前边四章,我们了解了 HTTP/2 的特性,以及如何在 Go 中利用 HTTP/2 的相关特性进行一些开发工作。本章作为一个收尾,我来谈一些自己对 HTTP/2 的理解,以及 HTTP/2 的应用前景展望,个人观点,不一定对,欢迎大家留言讨论。


先回顾下:

HTTP/2 新特性

  • 二进制分帧(HTTP Frames)

  • 多路复用

  • 头部压缩

  • 服务端推送(server push)


HTTP/2 通过多种多种技术手段(如:多路复用,头部压缩,优先级等),极大的优化了 HTTP 的 C/S 双端的数据交互体验,解决很多以往 HTTP/1.1 协议本身不能解决的问题。

HTTP/2 的优势

  • 低延迟的内容传输(多路复用,优化 RTT)

  • 带宽占用减小(头部压缩,编码,HPACK)

  • 连接数减少(多路复用,二进制分帧)


先来看下带宽和延迟对页面加载的影响,数据来源:HTTP/2 is here, let’s optimize! - Velocity SC 2015



  • 在 5M 以下的带宽内,对页面加载速度影响较大,5M 以上的带宽,对页面加载速度影响较小。

  • 延迟的减少对页面加载时间的提升呈线性增长


目前国内及一些发达国家,家庭带宽普遍也能达到 5M 以上了,所以 HTTP/2 即使减小了带宽占用,对我们 WEB 业务来说,提升也非常有限,收益不可观。但如果换一个角度来说,HTTP/2 减小了带宽占用,那么对国内的网络基础设施,甚至是跨洋光纤来说,要求都会降低,也相当于变相提升了网络基础设置的品质。对那些像 CDN 这种靠带宽来收费的场景来说,减小带宽也会减小成本(特定场景,不一定所有的 CDN 场景都能减小带宽占用)。


RTT 的优化导致延迟的减少,应该能极大程度上提升一些用户体验,这点看起来收益应该会比较明显,可事实又会怎样呢?程序猿们的智慧不可小觑,在 HTTP/1.1 阶段虽然不能通过多路复用来减少 RTT,但是我们可以用连接并发啊。页面内的资源链接放到不同的域名下,单个域名连接数有限制就用泛域名分散-Domain sharding 下。如果是 icon 这种小图标,资源太多又导致页面内链接太多,那就用雪碧图-CSS Sprites 啊。所以,经过这么一折腾,HTTP/2 减少 RTT 的优势也不存在了。


最后一点就是连接数的减少,这个是有绝对的优势了,之前 HTTP/1.1 甚至都通过增加连接数来优化页面性能。但这点优势也无非就是减少一些服务端的压力,对用户体验没有什么提升。对于不差钱的互联网公司门来说,减小的那一点压力还不至于去大动干戈。


HTTP/2 的 Server Push 功能,看起来能加速资源的获取速度,可是在目前的互联网环境下,大家都是把静态资源放到独立的域名,利用 CDN 进行加速,不会占用自己的服务带宽;CDN 拥有更多的服务节点,比服务本身能提供更好的接入和访问效果,所以目前看起来 Server Push 也没有很好的用武之地。即使要使用 Server Push,服务端也要关注客户端的 Cache,避免重复推送,浪费带宽,这点也还没有很好的服务端生态来解决。


另一个是关于 HTTP/2 服务的七层反向代理,当我们希望在一些网关对业务进行一些基础逻辑的处理时,需要使用这个。但由于 HTTP/2 引入了 Stream States,这个流程略显复杂,相当于针对客户端和服务端要维护两套不相同的状态,使得这个七层代理的实现也有一些难度。Nginx 官方也暂时不计划在 Proxy Module 中支持 upstream 的 HTTP/2,因为他们认为 HTTP/2 在性能的提升上,对 proxy 上的使用没有收益,甚至可能有反作用; 而且实现该功能,需要重写 upstream 模块,没有收益 + 工作体量大,就更没有必要去做了。nghttp2 应该是当前最完善的 HTTP/2 相关的组件了,但是其实现的代理 nghttpx 对 HTTP/2 代理也只实现了部分功能,无法代理实现 Server Push。


下图是通过配置了 nghttpx 的 http2-proxy 后,通过我们前边的 GO 代码实例,访问/push,返回的不支持 Server Push:



最后做个总结,我个人的意见是:HTTP/2 有优势,但其优势对现在通过应用层优化后的 HTTP/1.x 来说,优势没有那么大,并且,如果要发挥 HTTP/2 的优势,就必须将之前在 HTTP/1.x 阶段做的很多事情进行"回退",这种吃力并且讨不到什么好处的事情,大家没有动力去做。所以,可以预见的是,短时间内,HTTP/2 还是不会得到大范围的应用。但是随着国外一些互联网巨头们的带动,提供越来越多的可以便捷的使用 HTTP/2 的生态工具,HTTP/2 终究还是会发展起来的,毕竟它的优势还是存在的。


当前时间:2018 年 08 月 25 日 21:36:22,给 BAT 三家的首页截了个图,可以看到,都还是 HTTP/1.1,并没有启用 HTTP/2.(但起码都是 HTTPS 了>_>)





本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/qaqN4Eqndjg95TPBOC4d_g


2019-11-18 22:59919

评论

发布
暂无评论
发现更多内容

Boris FX Continuum 2024.5 mac视觉特效工具包 v17.5.4 激活版

Rose

FCPX插件:Reflections 反射效果

Rose

【IoTDB 线上小课 12】平常的早晨,我们已经是时间数据管理大师?

Apache IoTDB

MouseBoost PRO for Mac:提升鼠标操作效率的终极工具

小玖_苹果Mac软件

深入HarmonyOS NEXT开发中的ArkData操作SQLite数据库

威哥爱编程

HarmonyOS ArkTS HarmonyOS NEXT

教育行业过等保一般是几级?

行云管家

网络安全 等保 等保测评 教育行业

时序数据库 InfluxDB 3.0 版本性能实测报告:写入吞吐量提升效果验证

TDengine

数据库 tdengine 时序数据库

特朗普总统签署命令建立比特币战略储备,将作为类似于诺克斯堡的价值储存手段

TechubNews

加密政策

一文了解MySQL索引机制

京东科技开发者

FCPX插件:XEffects 3D Transitions for Mac(3D视频转场效果) v1.2激活版

Rose

两会热议零基预算改革,数智预算平台是有力“助推器”!

用友智能财务

Capture One Studio for Mac:高效影像处理,成就专业作品

小玖_苹果Mac软件

音乐NFT项目的运营和维护

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

FCPX插件motionVFX mLowers动态下标题

Rose

音乐NFT的线上运营

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

智能制造:数字孪生赋予企业高质量发展

积木链小链

数字化转型 数字孪生 智能制造

京东百万级调度系统(Buffalo)架构解密

京东科技开发者

区块链NFT项目的安全性

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

FCPX插件:视频去闪烁消除频闪工具Remove Flicker 中文英文版

Rose

fcpx插件:快速宽屏效果 Widescreen v1.1 中文激活版

Rose

FCPX插件: 专业分级调色插件 ColorFinale Pro for mac v2.2.8激活版

Rose

2025年建议买的堡垒机品牌是什么?

行云管家

网络安全 等保 堡垒机 等保评测

微前端父子应用及兄弟应用间组件或方法共享方案

京东科技开发者

FCPX插件:超级慢动作变速插件Twixtor Pro mac版 v7.0.2激活版

Rose

FCPX插件:3d摄像机效果3D Camera Rig

Rose

Path Finder for Mac:强大的文件管理工具

小玖_苹果Mac软件

Capture One 23 Enterprise for Mac:高效影像处理,成就专业作品

小玖_苹果Mac软件

音乐NFT项目的测试

北京木奇移动技术有限公司

软件外包公司 体育NFT 音乐NFT项目

FCPX插件:MotionVFX - mWedding 2 盛大的婚礼效果

Rose

FCPX插件:Skin Smoother(皮肤平滑效果)

Rose

音乐NFT智能合约开发

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

HTTP/2 in GO(五)--大结局_文化 & 方法_付坤_InfoQ精选文章