写点什么

Google 性能工程师 Ilya Grigorik 谈 HTTP/2

  • 2014-11-12
  • 本文字数:1701 字

    阅读完需:约 6 分钟

HTTP/2,也就是超文本传输协议第 2 版,是下一代 HTTP 协议。该版本是自 1999 年 HTML 1.1 发布后的首个更新,目前它正由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis (httpbis) 工作小组进行开发。

对于 HTTP/2,来自于 Google 的性能工程师 Ilya Grigorik最近发布了一个 PPT 对此进行了详细的说明。在该呈现中,Ilya Grigorik 首先提到了一组数据:目前平均每个 Web 页面大约会访问 12 个不同的主机,包含 78 个不同的请求,传输 1232KB 的数据,导致一个页面的渲染时间通常会在 2.6s 至 5.6s 之间。而在渲染占用的整个时间里面,网络大约占 69.5%,JavaScript 占 6.6%,布局占 5.1%,绘制占 4.5%,因此网络传输的效率对整体性能有明显的影响。

Ilya Grigorik 认为 HTTP/1.1 在性能方面有明显的缺陷,主要体现在以下几个方面:

a) 并行能力有限

  • 每一个源最大只支持 6 个请求
  • 管道在实际使用时不起作用
  • 竞争性的 TCP 流,强制快速重传(Spurious retransmissions)
  • 额外的握手、内存缓冲等

b) 客户端请求队列

  • 队首阻塞
  • 延迟的请求分发

c) 较高的协议负载

  • 头信息和 Cookies 大约要 800 字节
  • HTTP 元数据没有压缩

另外,HTTP/1.1 只允许由客户端主动发起请求,服务端只能等待客户端发送请求,这对于满足预加载的现状是一种桎梏。

针对这些问题,虽然我们可以通过一些变通的方法进行处理,但是这不可避免的会引发另外的问题。例如,针对请求数的限制我们可以把多个小文件打包到一个大文件中,但是由于并不是每一个页面都需要所有的小文件,所以这样做会造成带宽的浪费。那么 HTTP/2 是否能够帮助我们解决这些问题呢?它都包含哪些内容呢?

实际上 HTTP/2 是为了在万维网上进行低延迟的数据传输而设计的一个协议,它提供了 HTTP 语义的传输优化,支持 HTTP/1.1 的所有核心特征,并且在其他方面做的更高效。在 HTTP/2 中,基本的协议单位是帧,每个帧都有不同的类型和用途。例如,报头 (HEADERS) 和数据 (DATA) 帧组成了基本的 HTTP 请求和响应;其他帧,例如设置 (SETTINGS) 和推送承诺 (PUSH_PROMISE) 则用来实现 HTTP/2 的其他功能。

HTTP/2 基于 SPDY 协议,充分解决了 TCP 连接的限制。它允许多个并发 HTTP 请求共用一个 TCP 会话,而不是为每个请求单独开放连接,这样只需建立一个 TCP 连接就可以传送网页上所有资源,不仅可以减少消息交互往返的时间还可以避免创建新连接造成的延迟,使得 TCP 的效率更高。

针对只能由客户端发起请求的问题,HTTP/2 添加了一种新的交互模式,即服务器能够通过复用一个以 PUSH_PROMISE 帧发送的请求来实现推送。而对于数据冗余问题,在 HTTP/2 中帧包含的 HTTP 报头字段是压缩的,同时它还舍弃掉了不必要的头信息,因此能显著地减少请求和响应的大小。

如果你想了解与 HTTP/2 相关的更多信息,可以查看百度阅读提供的HTTP/2 中文版

对于Ilya Grigorik 所分享的内容 Hacker News 社区上也有一些人发表了自己的看法, byuu 认为:

首先 Firefox 以及一些其他的浏览器只能在 TLS 上使用 HTTP/2 ,这对很多人而言是一种阻碍。虽然加密非常好,但是 SSL 证书可能需要一定的成本以及额外的 CPU 资源。其次,使用一种新的、自定义的压缩算法对头信息进行处理并不一定合适,因为如果头信息只有 300 字节的数据,那么压缩数据所带来的带宽收益并不一定会比它所消耗的 CPU 成本高,况且这样还增加了程序的复杂性。最后,byuu 认为新协议可能会改变我们既有 Web 网站的工作方式,如果优化做的不好,那么性能可能会比 HTTP/1.1 更糟,同时兼容性也会阻碍大家对 HTTP/2 的采纳。

kator 则从另一个角度发表了自己的看法:

“我并不怀疑这里有大量可提升的空间,很明显 HTTP/2 有很多内容来自于 SPDY 以及其他的一些项目。我担心的是我们现在正在做的事情对那些可以将所有内容塞到一个流中的大公司而言有巨大好处,而对于小公司而言则更多的是劣势。另外,作为一个老家伙,我担心人们会丢失与这些服务对话,或者以文本的方式查看对话的能力。”


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-11-12 00:386328
用户头像

发布了 321 篇内容, 共 127.7 次阅读, 收获喜欢 19 次。

关注

评论 1 条评论

发布
用户头像
Ilya Grigorik
2023-12-24 01:25 · 上海
回复
没有更多了
发现更多内容

淘宝天猫API接口详解:商品详情与关键字搜索商品列表

代码忍者

API 接口 pinduoduo API

智改数转:制造业转型升级

万界星空科技

制造业 mes 智改数转 制造业数字化 万界星空科技mes

Taro 鸿蒙技术内幕系列(四):JDImage 自研鸿蒙图片库

京东科技开发者

Navicat for SQL Server for mac(数据库管理工具)v17.1.6激活版

小玖_苹果Mac软件

YMatrix 入选《中国物联网新物种企业发展报告2024》,助力物联网产业创新发展

YMatrix 超融合数据库

数据库 物联网 超融合数据库 YMatrix

【连载 02】 多线程实现

FunTester

中国信通院完成抗量子加密(PQC)应用系统升级验证测试

极客天地

观测云产品更新 | OpenAPI、应用性能监测、DQL 查询等

观测云

产品迭代

简单认识单元化

陈一之

技术思维 高可用架构 应用多活

Microsoft Excel 2019 for Mac(excel电子表格)中文正式版

小玖_苹果Mac软件

世界首次!智源研究院实现数字孪生心脏电功能超实时仿真

智源研究院

层出不穷的大模型技术,真的助力研发了吗?

思码逸研发效能

AI 研发效能 大模型 效能度量 AI辅助

钉钉开启全球化“下一站”,登陆中国香港市场

ToB行业头条

钉钉 出海

【亚马逊4.9风靡全球】播放量超2亿次的《基建大百科》引进出版!

博文视点Broadview

很多人陷入了职场认知误区

老张

认知提升 职场新人

InheritableThreadLocal从入门到放弃

京东科技开发者

Elasticearch索引mapping写入、查看、修改

京东科技开发者

Web端IM聊天消息该不该用浏览器本地存储?一文即懂!

JackJiang

即时通讯;IM;网络编程

LAZADA关键词搜索API接口的获取与应用

科普小能手

API 接口 lazada商品评价接口 lazada API接口 关键词搜索 lazada API

HyperWorks变形域和控制柄方法

智造软件

hyperworks 变形域 仿真教程

构建稳健数据架构,规避五大陷阱|StartDT Talk

奇点云

大数据

你知道这些隐藏的编程技巧吗?提高代码质量的十大方法。

天津汇柏科技有限公司

编程技巧

ToB企业如何让客户满意,又兼顾盈利?MCtalk·CEO对话×销售易

ToB行业头条

SaaS

观测云可用性 SLO 之跨多空间年度汇总统计

观测云

SLO

Google性能工程师Ilya Grigorik谈HTTP/2_语言 & 开发_孙镜涛_InfoQ精选文章