HTTP协议优化措施

经典提高效率的机制

1、并行连接
可以通过建立多个 tcp连接通道来实现并行传输数据,提高页面响应速率。并行TCP连接的使用还能够一定程度上减轻RTT延迟和短连接缓启动延迟的影响。

2、长连接
HTTP/1.1默认开启 Keep-Alive 选项,并且是 pipeline模式的。这样建立的 TCP 连接,可以在多次请求中复用。(注意:pipeline目前只能用于GET和HEAD请求)

3、缓存
3.1 Cache-control 用来控制缓存。当客户端发送的请求中包含 max-age 指令时,如果判定缓存层中,资源的缓存时间数值比指定的时间数值小,那么客户端可以接受缓存的资源;当 max-age = 0时,说明客户端不接受缓存,缓存层需要将请求转发给应用集群(通常是实时性要求很高的服务)。
3.2 If-Modified-Since 也是关于缓存的。这个选项的作用是:如果服务器的资源在某个时间之后更新了,那么客户端就应该下载最新的资源,否则服务器返回 ”304 Not Modified“ 的响应,这样也能节省带宽。

HTTP/2.0 优化措施

1、头部压缩
将原来每次都要携带的大量 key value 在两端建立一个索引表,对相同的头只发送索引表中的索引。

2、多路复用和分帧
将一个TCP连接中,切分成多个流,每个流都有自己的ID,并且流可以是从客户端发往服务器的,也可以是从服务器发往客户端的。流有各自的优先级。
将所有的传输消息分割为更小的帧(常见的帧有Header帧,Data帧等;不同类别的帧属于不同的流)
通过以上两种机制,客户端可以将多个请求分散到不同的流中,然后将请求的内容拆分为帧,进行二进制传输。(帧可以乱序发送,服务器端根据帧首部的流标识符重新组装,并且可以根据流优先级决定流的处理顺序)

这么做的好处是什么呢?举一个例子:

假设一个页面要发送三个独立的请求,分别获取css、js、.jpg。如果是HTTP/1.,那么这三个请求就是串行的,但是经过HTTP/2.0的优化,这三个请求理论上就变成了并行的,可以在一个连接里,客户端和服务端都可以同时发送多个请求或回应,并且不用按照顺序一一发送。

HTTP/2.0成功解决了HTTP/1.1的队首阻塞问题,同时,也不需要通过HTTP/1.*的并行连接机制用多条TCP连接来实现并行请求与响应,从而减少了TCP连接数对服务器性能的影响。同时将页面的多个数据等通过一个数据连接进行传输,加快了页面组件的传输速度。

3、二进制编码
对帧进行二进制编码,压缩体积,提高传输效率。

HTTP/2.0的缺陷:

由于HTTP/2.0的底层是依赖TCP协议的,而TCP协议在处理包时是有严格顺序的。当一条连接其中一个数据包传输遇到问题时,TCP连接需要等待这个包完成重传后才能继续进行,所以虽然HTTP/2.0通过多个stream,使得逻辑上在一个TCP连接上进行多路数据传输,但是如果一前一后,前面的stream2的帧没有收到,stream1的帧也会因此阻塞,相当于又回到了串行传输。

你可能感兴趣的:(HTTP协议优化措施)