HTTP/1.1 相比HTTP/1.0 性能上的改进:
- 使用TCP 长连接的方式去改善了HTTP/1.0 短连接造成的性能开销。
- 支持管道传输,可以一次性发送多个请求,减少整体的响应时间。
但HTTP/1.1 还有性能瓶颈
- 只能压缩Body的部分,如果首部信息越多延迟越大
- 发送冗长的首部,每次发送相同的首部造成的浪费较多。
- 服务器是按照请求的顺序响应的,如果服务器慢,会导致客户端一直请求不到数据
- 没有请求优先级
- 请求只能从客户端开始,服务器只能被动响应。
HTTP/2 相比HTTP/1.1性能改进:
- 头部压缩。协议会进行消除重复的部分。这就是
HPACK
算法:在客户端和服务器同时维护一个信息表,所有字段都会存入这个信息表之中,生成一个索引号,提高速度了。 - 二进制格式。HTTP/2 全面采用二进制格式,头信息和数据体都是二进制,并且统称为帧: 头信息帧和数据帧。
- 数据流。HTTP/2 的数据包不是按顺序发送的,同一个链接里面的数据包,属于不同的回应。每个请求或回应的所有数据包,成为一个数据流。每个数据流都有一个标记,客户端发送的为奇数,服务器发送的为偶数。
- 客户端指定数据流的优先级。优先级高的请求,服务器会先响应该请求。
- 多路复用。HTTP/2 是可以在一个连接中并发多个请求或者回应,而不用按照顺序一一对应。降低延迟,大幅提高了链接的利用率。
- 服务器推送。HTTP/2 可以主动向客户端推送消息。
HTTP/2 有哪些缺陷? HTTP/3做了哪些优化?
-
HTTP2 存在的问题,多个HTTP请求在复用一个TCP连接的时候,下层的TCP协议是不知道有多个HTTP请求的。所以一旦发生了丢包现象,就会触发TCP的重传机制,这样在一个
TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。 -
HTTP 3 把HTTP 下层的TCP协议改为UDP协议
HTTP3目前采用了QUIC协议,尚未广泛应用