NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论 1 条评论

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

让企业数字化砸锅和IT主管背锅的软件供应链安全风险指北

FinClip

leetcode 605. Can Place Flowers 种花问题 (简单)

okokabcd

数据结构与算法 贪心算法

一文搞懂│什么是跨域?如何解决跨域?

前端 经验分享 跨域 7月月更

直播带货系统源码

开源直播系统源码

软件测试 APP开发 直播系统源码 直播带货系统源码

【7.8-7.15】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

波卡创始人 Gavin Wood:波卡治理 v2 会有哪些变化?

One Block Community

区块链 科技

【用户文章】P4合并实践指南之实例拆解Resolve

龙智—DevSecOps解决方案

P4合并 解决冲突

知识干货:基础存储服务新手体验营

hum建应用专家

数据库

无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

葡萄城技术团队

nginx 前后端分离 cros

盘点波卡生态潜力项目 | 跨链特性促进多赛道繁荣

One Block Community

区块链 科技

在 Polkadot 中进行创建的三种方式 —— 平行链、平行线程、智能合约

One Block Community

区块链 科技

自定义spring boot starter三部曲之三:源码分析spring.factories加载过程

程序员欣宸

Java springboot 7月月更

了解JVM语言

沃德

Java 程序员 7月月更

MySQL 添加用户并授予只能查询权限

叫练

华为影像XMAGE:求尽世间像,终见菩提心

脑极体

网络安全网格概念以及特点简单普及

行云管家

网络安全 网络安全网格

游戏有什么用?| 游戏应用价值研究案例征集

易观分析

游戏

红象云腾大数据基础平台与龙蜥社区操作系统再次完成联合测试

OpenAnolis小助手

开源 操作系统 龙蜥社区 红象云腾 兼容性互认证

代码合规性:开发人员使用Helix QAC的5大原因

龙智—DevSecOps解决方案

静态代码分析 Helix QAC 静态代码分析器

Java实现有getMin功能的栈

工程师日月

Java 算法 7月月更

数据库每日一题---第23天:游戏玩法分析 l

知心宝贝

数据库 程序员 算法 后端 7月月更

Gartner:无需数据中台,API就能胜任连接前端和后端的工作

雨果

数据中台 API

没有可观测性,DataOps 注定失败|TheNewStack

观测云

焱融科技入选北京市 2022 年度“专精特新”,领航混合云文件存储

焱融科技

用对工具,CI事半功倍

龙智—DevSecOps解决方案

ci 持续集成 ⾃动化构建 ⾃动化部署

全球云市场增势迅猛,数据安全进入法治化的强监管时代

行云管家

云计算 网络安全 数据安全

助力开发者,全方位解读 APISIX 测试案例

API7.ai 技术团队

开源 测试 APISIX 网关

阿里云E-MapReduce 极客大赛开放报名 数十万奖金等你挑战

Lily

比赛

怎么学习Object.defineProperty | 一篇文章带你们快速学会

bo

JavaScript 前端 7月月更

java培训4种Map遍历 key-value 的方法

@零度

JAVA开发 map

大数据培训 Hive 相关知识的全面总结

@零度

hive 大数据开发

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