经典提高效率的机制 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帧等;不同类别的帧属于不同的流) 通过以上两种机制,客户端可以将多个请求分散到不同的流中,然后将请求的内容拆分为帧,进行二进制传输。(帧可以乱序发送,服务器端根据帧首部的流标识符重新组装,并且可以根据流优先级决定流的处理顺序) 3. 二进制编码 对帧进行二进制编码,压缩体积,提高传输效率。 QUIC(google)优化措施1. 自定义连接机制 HTTP/2.0是基于TCP协议的,而TCP协议规定的连接是由四元组(源IP,源端口号,目的IP,目的端口号)标识的。如果其中任何一个元素发生变化,就需要重新连接。而如果在网络不稳定的情况下,这种情况是会存在的。所以如果是HTTP/2.0协议,就会因为TCP的三次握手而增加时延。 QUIC是自己定义了维护连接的机制,即用一个64位的随机数作为ID来标识,而UDP是面向无连接的,所以当IP或者端口号发生变化的时候,只要ID不变,则不需要重新连接。 2. 无阻塞的多路复用 同 HTTP/2.0一样,同一条 QUIC 连接上可以创建多个 stream,来发送多个 HTTP请求。但是 QUIC 是基于 UDP协议的,一个连接上的多个 stream 之间没有依赖。这样,加入 stream2 丢失了一个 UDP包,后面紧跟着 stream3 的一个 UDP 包,虽然 stream2 的那个包需要重传,但是 stream3 的包无需等待,就可以发送给客户端。
|