写点什么

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:386517
用户头像

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

关注

评论 1 条评论

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

3. Docker镜像详解

鱼书

c++ 8月月更

基于 JMeter 完成 Dubbo 接口的测试

霍格沃兹测试开发学社

用GaussDB(for Redis)存画像,推荐业务轻松降本60%

科技怪咖

STM32+M5311对接 OneNET 项目记录

矜辰所致

stm32 8月月更 M5311

DevSecOps 安全即代码基础指南

SEAL安全

DevOps DevSecOps 云安全 DevSecOps和敏捷

技术分享 | 软件测试入门必会-流程管理平台

霍格沃兹测试开发学社

运维理想和现实,你是?

嘉为蓝鲸

运维 AIOPS 故障处理 补丁

拔掉电源会怎样?GaussDB(for Redis)双活让你有备无患

科技怪咖

《低代码发展白皮书(2022年)》&《2022低代码·无代码应用案例汇编》,发布了

华为云开发者联盟

云计算 后端 低代码 开发

驭数有道,天翼云TeleDB系列产品全新升级

天翼云开发者社区

快应用与原生APP相比,都有哪些优势?

Speedoooo

小程序 移动开发 轻应用 快应用 移动框架

测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)

霍格沃兹测试开发学社

技术分享 | 做为测试,那些必须掌握的测试技术体系

霍格沃兹测试开发学社

测试面试 | 某 BAT 大厂测试开发面试真题与重点解析

霍格沃兹测试开发学社

技术分享 | 一文带你了解测试流程的体系

霍格沃兹测试开发学社

快速开始安装部署ArkID构建IDaaS,轻松拥有标准化用户身份体系

龙归科技

单点登录 Idaas ArkID

GaussDB(for Cassandra)新特性发布:Lucene二级索引,让复杂查询更智能

科技怪咖

测试面试 | Python 算法与数据结构面试题系列二(附答案)

霍格沃兹测试开发学社

DeFi+NFT质押置换挖矿系统开发技术方案详情

开发微hkkf5566

测试开发基础 | Python 算法与数据结构面试题系列一(附答案)

霍格沃兹测试开发学社

安全可信 | 首批!天翼云通过可信云安全云工作负载保护平台评估

天翼云开发者社区

科普达人丨一图看懂镜像

阿里云弹性计算

镜像 ECS

华为伙伴暨开发者大会之GaussDB高校行,产教融合持续赋能人才培养

科技怪咖

【CSM认证】9月17-18&24-25日在线周末班 | 全国招生

ShineScrum

CSM

MobTech 短信验证使用说明与应用创建

MobTech袤博科技

App sdk 短信验证

接口测试实战 | Android 高版本无法抓取 HTTPS,怎么办?

霍格沃兹测试开发学社

软件测试 | 测试开发 | 接口自动化测试之JSON Schema模式改如何使用?

测吧(北京)科技有限公司

JSON Schema

干货 | Dubbo 接口测试原理及多种方法实践总结

霍格沃兹测试开发学社

给ShardingSphere提了个PR

艾小仙

Java GitHub 程序员 shardingsp

【CSPO认证】国际Scrum联盟认证导师CST授课 | 全国招生

ShineScrum

CSPO认证

测试管理和领导力秘诀,12+ BAT 大厂测试经理的干货经验汇总

霍格沃兹测试开发学社

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