HTTP/2 的首要目标是改善 Web 应用程序用户的体验。作为一个二进制协议,它拥有包括轻量型、安全和快速在内的所有优势。HTTP/2 保留了原始 HTTP 协议的语义,但更改了在系统之间传输数据的方式。这些复杂细节主要由客户端和服务器管理,所以网站和应用程序无需重大更改即可享受 HTTP/2 的优势。
本文将概述 HTTP/2,包括它试图解决的问题,以及它的大量新的性能增强特性 — 包括请求/响应复用、报头压缩和服务器推送。
HTTP 的历史在深入介绍 HTTP/2 协议的细节之前,让我们回到过去并回顾一下HTTP 中的起源。
该协议于 1989 年首次曝光,以 HTTP 0.9 的形式面世。Timothy Berners-Lee 在瑞士日内瓦附近的 CERN 上首次提到它时,它仅包含 1 行代码。唯一的方法是 GET,还有一个像下面这个示例这样简单的请求:GET /index.html。响应同样很简单,仅包含所请求的文件。
HTTP 0.9 不是一个正式标准,通过这种方式引用它是为了将它与随后的正式版本区分开。1996 年,推出了 HTTP 1.0 作为 IEFT 标准(依据 )。1999 年,在 中发布了 HTTP 1.1。第一个主要版本中的缺点促使人们在 1999 年进行了一次小幅修订,引入了大量可选特性和零碎细节 — 并消除了一些不好的方面。
几乎没有浏览器(或服务器)实现会采用该协议的每个方面,这导致不同浏览器间的用户体验不一致。显然,浏览器供应商无法实现 HTTP 1.1 中引入的 HTTP 管道的性能增强特性。
您可以亲自查看:在最近的一次 中,Cloudflare 通过 HTTP 1.1 和 HTTP/2 加载了 200 个图像切片,然后比较了加载时间。
随着网络的使用变得更加普遍,性能需求呈指数级增长,而对 HTTP 的需求阻碍了性能提升。开发人员开始创建工具来克服该协议的不足。例如,HTTP 对 TCP 套接字的低效使用限制了性能,所以开发人员退而使用精心设计的服务器架构(racks of servers)来满足应用程序需求。从这个角度讲,未能让管道正常工作,促使人们开始着重反思 HTTP 的需求。
15 年后,才成立了 工作组来正式识别该协议的棘手问题,并最终起草对 HTTP/2 的预期。怀着显著改善最终用户对 HTTP 1.1 延迟的认知的使命,该工作组的协议推荐包含针对 “线头阻塞” 问题、报头压缩和服务器推送的精选解决方案。 (HTTP/2) 和 (HPACK) 的结合,预示着 Web 应用程序性能将急剧提升。 |