HTTP1.0--HTTP1.1的优化:
1.使用长对话模式:之前每次请求响应都需要建立TCP/IP连接,资源消耗较大,使用长对话可以一次连接多次请求响应
2.管道传输:之前http1.0发送一个请求后必须等待结果才能发送第二个请求,而http1.0在发送完请求后可以接着发送第二次请求,最后只要把响应的结果按顺序对应即可。
HTTP1.1存在的问题:
1.只能压缩body部分:请求信息头部无法压缩,头部较长时资源消耗较大。
2.队头堵塞:由于管道传输接收响应后需要一一对应请求,当有一个请求响应较慢,为了保证响应不篡位后续请求不会发送处于堵塞状态。
3.头部信息冗余:同时有多个较长的头部时,无法减少重复信息冗余。
4.没有请求优先级控制。
5.请求只能从客户端发起。
HTTP2.0的优化:
1.可以压缩头部内容,针对头部冗余,使用hpack算法,服务器和客户端同时建表标记字段,以序号代替内容,减少冗余。
2.二进制报文:相比于原本明文报文,http2.0使用了更加容易让机器接受的二进制报文,加大传输效率。
3.多路复用:当一个包响应较慢时,可以不按照顺序进行响应,移除了http1.1的串行请求,大幅提高了连接的利用率。
4.数据流标号:给每个请求的包标上序号,客户端的用奇数,服务端的用偶数,这样就能够进行包处理优先级管理。
5.推送机制:当客户端请求html时,服务器可以提前将一些css或js内容发送到客户端。
如何优化HTTP1.1:
1.减少使用HTTP请求
2.客户端角度,减少请求次数
3.服务器角度,优化响应结构
减少使用HTTP请求:
使用缓存机制,当客户端重复请求统一http资源时,服务器告知客户端将请求响应结果在一定时间内存贮在本地磁盘上,下次请求先查找缓存,没有在查找服务器。
如果请求缓存过期了,那么就像第一次那样请求资源即可。
如果请求本地的缓存过期了,但是服务器任然在使用,那么客户端先检测缓存发现过期,发送请求到服务器,服务器返回304响应告知客户端资源任然可以继续使用。客户端就会任然去缓存获取资源。
客户端角度,减少请求次数:
1.减少重定向次数
重定向其实就是两次访问,但是请求的网络包在传输的时候不是直接到达目的地的,而是经过数个代理服务器传到服务器的,所以一次重定向就相当于物流快递,路过多个中转站,送到了之后再送回来,一次重定向就更麻烦了。就像派人从上海出发到石家庄送信,石家庄返回给你一个信件叫302,告诉你人不在这,去北京送,结果你派的人从石家庄回上海后又从上海去北京。这不是闲的吗?哈哈哈。所以当服务器返回302后可以直接由代理服务器直接去重定向后的Location。以后你的信使接到你发的石家庄任务后到了石家庄,发现没人那么就直接去北京。如果当时去石家庄发现对方回了个301,那信使回来后就会告诉你,那家人搬去北京了,现在是天龙人,以后都送北京(本地缓存了永久重定向信息)。
2.合并发送请求
比如一个页面有多个信息需要多个请求发送时,可以合并成一个大请求发送。就像寄件不可能把寄的件拆分成半斤的物品发送几十份,那得麻烦死。
3.延迟发送请求
就是吃多少拿多少,需要多少发送多少,暂时不需要的就先不发送。
服务器角度,优化响应结构:
无损压缩:
常用于源码文件,程序,可执行软件等。
有损压缩:
如图片,视频等。