HTTP/2是HTTP协议的最新版本,这一版本对性能非常关注。HTTP/2协议由SPDY/2协议改进而来,后者最初是Google公司为了传输Web内容而开发的一种开放的网络协议。
与使用纯文本方式表示的HTTP 1.x不同,HTTP/2是一种二进制协议:二进制表示不仅能够让HTTP/2的语法分析变得更为高效,还能够让协议变得更为紧凑和健壮;但与此同时,对那些习惯了使用HTTP 1.x的开发者来说,他们将无法再通过telnet等应用程序直接发送HTTP/2报文来进行调试。
跟HTTP 1.x在一个网络连接里面每次只能发送单个请求的做法不同,HTTP/2是完全多路复用的(fully multiplexed),这意味着多个请求和响应可以在同一时间内使用同一个连接。除此之外,HTTP/2还会对首部进行压缩以减少需要传送的数据量,并允许服务器将响应推送(push)至客户端,这些措施都能够有效地提升性能。
因为HTTP的应用范围是如此的广泛,对语法的任何贸然修改都有可能会对已有的Web造成破坏,所以尽管HTTP/2对协议的通信性能进行了优化,但它并没有对HTTP协议本身的语法进行修改:在HTTP/2中,HTTP方法和状态码等功能的语法还是跟HTTP 1.1时一样。
在Go 1.6版本中,用户在使用HTTPS时将自动使用HTTP/2,而Go 1.6之前的版本则在golang.org/x/net/http2包里面实现了HTTP/2协议。本书的第3章将会介绍如何使用HTTP/2。