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慢启动和拥塞避免机制时,网络延迟可能会更严重)。