1、HTTP1.1下的网站优化方式
a、精灵图(雪碧图)
b、域名拆分(浏览器同一个域名并发下载限制,2~6个)
c、资源域名分离
2、HTTP1.1 新增特性
OPTIONS方法
Upgrade首部
Range范围请求
压缩和传输编码(transfer-encoding)
管道化(pipeline)
3、pipeline管道化
管道化允许客户端在已发送的请求收到服务端的响应之前发送下一个请求。
4、pipeline管道化的限制( https://juejin.im/post/5ce37660f265da1bb13f05f0)
* 管道化要求服务端按照请求发送的顺序返回响应(FIFO),原因很简单,HTTP请求和响应并没有序号标识,无法将乱序的响应与请求关联起来。(会导致队头阻塞)
* 客户端需要保持未收到响应的请求,当连接意外中断时,需要重新发送这部分请求。
* 只有幂等的请求才能进行管道化,也就是只有GET和HEAD请求才能管道化,否则可能会出现意料之外的结果
5、HTTP发展历程
1999:HTTP1.1
2009:SPDY (多路复用,帧和首部压缩,奠定HTTP2基础)
2015:HTTP2
2019:HTTP3
6、HTTP2特性( https://developers.google.com/web/fundamentals/performance/http2?hl=zh-cn)
二进制协议:H2的分帧层是基于帧的二进制协议,方便机器解析
首部压缩:减少传输大小
多路复用
加密传输
7、HTTP2 分帧层、数据http层
* 同域名下所有通信都在单个连接上完成。
* 单个连接可以承载任意数量的双向数据流。
* 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
* 同个域名只需要占用一个 TCP 连接,消除了因多个 TCP 连接而带来的延时和内存消耗。
* 单个连接上可以并行交错的请求和响应,之间互不干扰。
* 在HTTP/2中,每个请求都可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。
7、如何查看当前网站使用了什么HTTP协议,查看HTTP2(本网站已经使用HTTP2)
window.chrome.loadTimes().connectionInfo
8、nginx开启http2
server {
listen 443 ssl http2;
server_name demo.tp0.top;
root /home/vhosts/http2;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /home/vhosts/ssl/http2/fullchain1.pem;
ssl_certificate_key /home/vhosts/ssl/http2/privkey1.pem;
}
9、HTTP1.1 浏览器请求图
10、HTTP2 浏览器请求图
来自anson博客
2020-12-17 20:58:39