作为网虫的你,是不是每天都在敲打 http://xxx.ooo 浏览网页啊,可是你知道这里的 http 是什么意思吗?HTTP(HyperText Transfer Protocol)超文本协议,是互联网上的一个基本协议,而在打开一个网页时,表示以 http 协议的方式来获取这个网页的内容,其中包括了网页文本和各种图片资源。如果你想以加密的方式访问,还可以使用 https 协议来获取资源。不过,今天要聊的是它的二代目,也就是HTTP/2 协议,它是HTTP 协议自1999 年发表1.1 版本后。
16 年里的第一次更新。毕竟过去了16 年,HTTP/2 对于第一代的HTTP 协议来说,有了很大的进步,它主要体现在这么几个方面:
1. 多路复用。我们在打开一个网页时,会首先发出第一个请求,请求的是真实的网页页面,然后通过解析页面内容,去请求一些必要的 JS、CSS 和图片资源,在以前的 HTTP 协议中,每次请求都要重新去建立一次 TCP 链接,客户端和服务器的对话像是这样的:
我:老板你好!
老板:欢迎光临
我:谢谢,我要一张网页
老板:好的,给你一张网页
我:再见
我:老板你好!
老板:欢迎光临
我:谢谢,我要一张图片
老板:好的,给你一张图片
我:再见
我:老板你好!
老板:欢迎光临
我:谢谢,我再要一张图片
老板:好的,再给你一张图片
我:再见
可以看出,每次对话都要从新开始打交道,要是遇到一个急性子,肯定已经崩溃了。而 HTTP/2 将多个HTTP 请求,复用在一个TCP 链路上,这样的场景就变成了:
我:老板你好!
老板:欢迎光临
我:谢谢,我要一张网页
老板:好的,给你一张网页
我:我要一张图片老板:好的,给你一张图片
我:我再要一张图片老板:好的,再给你一张图片
我:再见
这样少说了很多废话,沟通起来效率自然会更高了。
2. 二进制传输,老的 HTTP 在文本传输上都是使用的文本,而 HTTP/2 支持二进制数据流的传输,这样就给了大家很大的想象空间了,你可以选择使用 HTTP2 传输一些加密后的数据,也可以使用它来传输视频流。
3. 使用 HPACK 压缩头部信息。在每次 HTTP 请求中,都会带上很多相同的请求头,如 User-Agent等,这些信息对于一个客户端来说,几乎就是不怎么变化等,如果没次请求都带上,也是浪费资源啊,在HTTP/2 中就对头部信息进行了一顶的压缩。
4 服务器端 Push,在 HTTP 1.1 时代,都是客户端主动向服务器请求数据。而服务器想 push 资源给客户端,都是通过其它特殊通道实现的。HTTP/2 中,支持了服务器可以直接将资源推送给服务器。
HTTP/2 已经发布了一年多了,而 Chrome,Firefox 这些浏览器也都早就支持了,现在的问题,就是很多服务器端并没有迁移到 HTTP/2。再 check 一下自己的产品,面对如此高效省流的诱惑,你还能抵抗多久呢?