在过去十年中,Web 技术已经取得了种种进展。从基本的 HTML 开始,网页发展出更丰富的外观和感觉,变得更加直观,对用户更加友好并且越来越大放异彩。这些变化的关键贡献来自于一些新的和翻新技术,且借力于最新的硬件发展和更好的网络连接支持。但性能,自始至终都是 Web 应用关注的领域。
近年来,JavaScript 库,CSS 库和插件的火爆使得每个页面都可能包含大量 JavaScript、CSS、图片或者其他资源文件。许多场景下,一个页面会向服务器发起超过50条 http 请求,而且每条请求会与服务器创建一个新的 TCP 连接,检索文件,然后关闭这个连接。这意味着与服务器建立了超过50个 TCP 连接。创建和处理每一个连接都是一个代价沉重的过程,除此之外,很多浏览器会限制并发连接的数量,通常限制个数在4至8个不等。
在过去15年中,HTTP 协议本身并没有太大的改变。 现在采用的 HTTP 1.1 早在1997年就定义了,而自那时以来,网络已经发生了翻天覆地的变化。IETF(互联网工程任务组)意识到这些新的挑战,并已经为此与 POC 协同工作了一段时间。现在,他们提出了 HTTP 协议的一个新版本——HTTP/2,该协议目前正处于标准化进程中。
HTTP/2 是什么?
HTTP/2 是 HTTP 协议的第二个主要版本,该版本关注于减少延迟时间,从而提高页面加载速度。它基于谷歌的 SPDY 协议,包括以下主要项目:
- 在单一的 TCP 连接中并行加载多个请求
- 在 HTTP headers 部分启用压缩
- 允许服务器将内容推送到客户端
与早期版本有何不同?
最初的 HTTP 版本为每一个请求使用一个新的 TCP 连接,这涉及建立连接和数据包传输,是非常耗时的过程。HTTP1.1 中完成了很多改变,流水线被引入,理论上允许在单一的连接中发送多个请求,但请求和响应需要同步处理。 HTTP/2 是基于 SPDY 协议的,打开一个 TCP 连接并重复使用,这使得许多请求得以并行发送,而无需等待响应。让我们来形象地查看该过程:
除此之外,它也支持压缩 HTTP headers 和服务器推送(如前所述)。在下面的例子中,我们将看到它如何影响网页加载。
在 ASP.NET4.6 中使用 HTTP/2
一个典型的 Web 页面中会引用许多不同的资源,如 JavaScript 文件,CSS 文件,图像等。在下面的例子中,笔者使用 Visual Studio 2015创建了一个 ASP.NET 4.6 空 Web 表单应用示例,并在其中引用了网页中常见的一些资源。然后,笔者为该应用添加了一个 Web 表单和多种资源,请参照下列代码:
HTTP2 Demo using ASP.NET Web forms 4.6