一 复习与目标
1 复习
简单密码学、对称加密与非对称加密
数字签名、数字证书
SSL/TLS
HTTPS = HTTP + SSL/TLS,SSL/TLS为HTTP提供了保密性、完整性和鉴别性
2 目标
HTTP1.1的问题
HTTP2.0设计关键
HTTP2.0的详情
注1:本文并不会讲解h2的所有内容,只会包含重要(主观)的内容。
注2:下一篇再讲解具体每个报文类型并进行报文分析。
二 HTTP1.1的问题
(1)HTTP管线化的问题
简单说就是在等待上一个请求响应的同时,发送下一个请求。
多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;但是客户端要按照发送请求的顺序来接收响应。
队首阻塞(Head-of-line blocking):如果前一个请求很慢,就会导致后续的请求都受到影响。
队首阻塞的存在,导致浏览器一般禁用该功能,服务器也应该禁用掉。
(2)多个TCP连接(6个)
由于现在一个网站的请求变多,文件变大,所以HTTP1.1为了提升下载速度,将支持最大6个TCP(Chrome)连接进行HTTP请求。
管理一个TCP连接是非常消耗客户端和浏览器的资源,所以需要优化。
(3)分片(多域名)
网站的资源进行划分多域名,这样可以摆脱客户端对一个域名最大只能打开6个TCP连接的限制。
缺点是多个DNS解析的消耗和更多TCP连接的管理
(4)首部太大
HTTP1.1每次请求都会带上完整的首部
三 HTTP2设计关键
降低协议对延迟的敏感
修复pipelining和head of line blocking的问题
并行操作无需与服务器建立多个连接,从而改进 TCP 的利用率,特别是拥塞控制方面;
保持 HTTP 1.1 的语义,利用现有文档,包括(但不限于)HTTP 方法、状态码、URI,以及首部字段
明确指出所有新的可扩展机制以及适当的扩展策略。
四 HTTP2协议
(1)二进制分帧层
分帧层位于套接字接口与应用可见的高层HTTP API 之间的一个新机制:HTTP 的语义,包括各种动词、方法、首部,都不受影响,不同的是传输期间对它们的编码方式变了。
HTTP 1.x 以换行符作为纯文本的分隔符,而HTTP2.0 将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
(2)流、消息和帧