View on GitHub

Yinjie - GitHub.io

Welcome to the Yinjie's notes

HTTP/2

什么是 HTTP2

http2 是 http 的替代品,它不只是从协议面上对 http 1.x 进行重写,而是对这个广泛的线上协议进行全新的表达。同时 http2 的方法、状态码、语义与 http1.x 是相同的,并且拥有相同的 API。

http2 的注重点主要是:最终用户端感受到的具体的延迟;网络和服务器的资源利用情况。还有一个重点考虑的是能够使 web 站点到浏览器进行单一的连接。

http2 的前身是 SPDY, 当然在后续的进化中,不断的加入了全新的内容。

http 协议与计算机网络基础知识

在了解 http2 之前先极其简要了解一下相关的知识

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。属于网络应用层,底层协议使用 TCP/IP。

一次HTTP操作称为一个事务,其工作过程可分为四步:

首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

http_work

http 1.x 存在的问题

  1. 每次请求都要重新发起一次 TCP 连接,TCP 的第三握手请求所占用的网络资源甚至会比所传输的数据还要多。虽然后期浏览器对此做出了优化,多个请求可以使用同一 TCP,但必须按请求队列的顺序挨个传输,节省了 TCP 建立连接时间,但没有解决并发和阻塞的根本问题;
  2. 同域资源的并发请求数有限,一般为2-6个,根本原因是为了防止 TCP 连接过多,两端压力过大;
  3. 协议的报文头信息较冗长,而且不做压缩,对于短消息的传输代价很大;
  4. 不能传输二进制,进行明文的字符传输,传输内容受限且安全性差,导致其体质上不能作为高级传输协议;

http 2 的改进

  1. TCP 连接的多路复用,同源只需建立一个 TCP 连接,所有的请求都可以通过一个 TCP 连接进行传输,同一连接内支持并发请求,还支持并发的优先级与流量控制; hpbn_1202

  2. 协议数据改用二进制,传输的内容更加自由,协议的解析和优化扩展上带来更多的优势,(物联网、智能设备的福音); hpbn_1201

  3. 对报文头强制采用 HPACK 进行数据压缩,节省流量; hpbn_1205

  4. 服务器推送,服务器可以“主动的”所需的资源推送给用户,用户不用再单独请求。比如用户请求了一个页面 DOC 包,服务器可找出页面中所需的 JS 与 CSS,并通过 response 推送给用户。 hpbn_1204

  5. * 使用 HTTPS 加密方式,对传输的数据进行加密。
    (SPDY 的历史遗留方案,现在好像改为非强制加密,但目前的HTTP2服务器几乎都是采用强制加密)。

实现 HTTP2

目前 HTTP2 的技术已经很成熟,市面上各类服务器与浏览器都早已开始支持 HTTP2 。

服务器端

HTTP2 官网上给出了非常详细的支持 HTTP2 的各类服务器版本号或是相关组件: http2 服务器一览表

客户端

从2012年开始起草,到2015年正式发布,期间发布了几个草案版,各大浏览器也紧随其后的陆续在新版提供支持 以 HTTP/2 正式版为准,各浏览器支持情况如下图: 1.pic_hd

*SSL 证书

目前大多数服务器架设 HTTP2 都需要 SSL 证书进行加密,可以去正规 SSL 机构申请一个。 在 GOOGLE 的大力推进下,HTTPS 已经非常普遍,而且也都免费了。

提供两个:

国内的:沃通

国外的:StartSSL™ Certificates & Public Key Infrastructure