您的位置:首页 > 理论基础 > 计算机网络

(一) 初识HTTP/2

2016-01-07 17:46 197 查看
HTTP/2是HTTP协议家族的新成员,按照IETF的HTTP Working Group的规划,它将取代“历史悠久”的HTTP1.1协议。

为什么修改HTTP呢?

HTTP协议的上一个版本是HTTP1.1,在它“服役”超过16年的今天,Web的世界已经发生了巨大的变化。

现在,浏览器打开一个新网页,下载的内容不仅仅包含一个HTML文件和少数资源文件了。实际情况可能是,浏览器发起了数十次,甚至数百次HTTP请求,除了一个HTML主体文件,还有大量的图片、CSS、JavaScript等资源。

HTTP加载这些资源的方式是低效率的,因为它要求同一时间在每个TCP连接上只能有一个正在进行的HTTP请求。相对于HTTP/1.0,HTTP/1.1引入了持久连接和管道等技术,在一定程度上缓解了并发请求的问题,提高了网络传输的效率,但是,同一TCP连接上的请求仍然是有序进行的,队首阻塞(Head-of-line blocking)现象依然存在。因此,在加载同一个网页的大量资源时,为了提高并发以减少延迟,浏览器不得不同时打开多个到相同服务端的TCP连接(浏览器通常会对连接数进行限制,目的是减少网络和内存开销,同时避免影响其它程序的正常工作)。这些并发的TCP连接,以及其上传输的大量类似的HTTP请求(包含大量重复的HTTP头信息),造成了不必要的网络开销,既浪费又低效(大量数据包在遭遇TCP慢启动和拥塞避免机制时,网络延迟可能会更严重)。

HTTP/2与HTTP1.1相比,有哪些不同呢?

采用二进制协议,而不是文本协议

使用多路复用技术,而不是有序和阻塞的请求

使用单一的TCP连接来实现并行处理

采用HTTP头压缩技术

允许服务端主动向客户端推送响应

下面这张图很好地展现了HTTP各个版本中获取资源的时间对比,很明显,HTTP/2具有很大的优势。



(注:图片来自http://blog.scottlogic.com/2014/11/07/http-2-a-quick-look.html

HTTP/2概况

HTTP/2协议以SPDY协议为基础,并吸收借鉴了其它一些项目的优点。

HTTP/2为HTTP语义提供了优化传输,它兼容HTTP/1.1的全部核心特性,并且,在许多方面更加高效。

在HTTP/2中,基本的传输单元是“帧”。HTTP/2定义了多种帧类型,每种帧类型都有自己的二进制格式,用来提供不同的功能。其中,HEADERS和DATA这2种帧构成了HTTP请求和响应的基础,SETTINGS,WINDOW_UPDATE和PUSH_PROMISE等帧类型用于支持其它特性。

通过为每个HTTP请求/响应分配自己的“流”,HTTP/2实现了请求的多路复用。不同的流之间是彼此独立的,因此,一个请求或响应流的阻塞不会影响其它流的处理。

“流量控制”和“优先级”能够确保高效地使用多路“流”。流量控制有助于确保只有接收方能够使用的数据才会被真正传输。优先级确保有限的资源能够优先被最重要的流直接使用。

“服务端推送”允许服务端在预测到客户端需要哪些数据时,主动将这些数据发送给客户端,也就是说,以一些网络传输为代价来避免潜在的网络延迟。服务端通过合成一个包含PUSH_PROMISE帧的请求来实现推送,然后,服务端可以在一个单独的流里面发送响应给这个合成的请求。

在一个TCP连接中,HTTP头域包含大量的冗余数据,因此,包含这些数据的帧是经过压缩的。通常情况下,这样能够显著地减小请求报文。

HTTP/2的Demo网站

目前网络上支持HTTP/2的网站还不多,幸好,找到了一个HTTP/2的Demo网站,可以让我们直观地观察和分析HTTP/2的行为。

HTTP/2 TECHNOLOGY DEMO

这是一个HTTP/2技术的演示网站,它可以分别采用HTTP1.1和HTTP/2这两种方式来分别下载由200张小图构成的大图,并对比这两种情况花费的时间。效果图如下:



如果你安装了Chrome浏览器(或其它类似的浏览器),那么可以使用快捷键F12打开开发者工具,并分别观察这两种情况的HTTP协议报头等信息。

HTTP1.1抓包结果(部分图片):



HTTP2抓包结果(部分图片):



通过上面两张图片,可以很清晰地看到,HTTP1.1下载大量图片时基本是串行的,而HTTP/2下载大量图片时几乎是并行的。

对一个HTTP2请求的协议内容进行观察,发现Header部分中包含以英文冒号开头的报头字段,表明这个请求确实是通过HTTP2协议完成的。



也来试试吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: