HTTP/1.1的改进
HTTP/1.0的缺点
1、HTTP/1.0每一次请求都要建立一次连接,然后断开连接,系统开销大。
2、发送方每次都要等上次发出的请求得到响应了才能发送下一个请求,效率太低。
HTTP/1.1的改进
1、TCP连接使用长连接,减少频繁建立连接释放连接的系统开销。
2、支持管道进行网络传输,不用等上一个请求被响应就能发送下一个请求,提升效率。
HTTP/2的改进
HTTP/1.1的性能缺陷
1、请求/响应的头部过大,会增大延迟,要减小延迟只能压缩请求/响应体。
2、发送过多相同的头部,浪费资源。
3、虽然HTTP/1.1支持管道进行传输,提升请求发送的效率,但是服务端对请求的响应是按顺序响应的,如果前面的请求没有处理,那么后面的也得不到处理,称为队头阻塞。
4、请求没有优先级的区分。对于客户端来说,有的请求可能急需处理,而有些请求即使慢一些响应也能接受,而HTTP/1.1没有考虑到这方面。
5、请求只能由客户端发出,服务端只能被动响应。
HTTP/2的优化
1、头部压缩:如果发送方同时发出多个请求,且头部相同,则会消除重复的部分。实现原理是在客户端和服务端维护一个索引表,如果有相同的字段就发送索引号即可。
2、二进制格式:HTTP/2采用二进制格式,计算机无需将文本转化成二进制,提升了效率。
3、数据流:一次请求或响应作为一个数据流,数据流可以并发发送数据帧给对方。在不用建立多条连接的情况下也能解决队首阻塞的问题。
4、多路复用:一个连接中并发多个请求或响应,接收方不用按照顺序进行响应。
5、服务器推送:服务器不再是被动的,也可以主动给客户端发送消息。例子:服务器可以提前把可能用到的CSS、JS等静态资源县发给客户端,这样不用等到请求的时候再发送。
HTTP/3的改进
HTTP/2的缺陷
多个HTTP请求复用一个TCP连接,一旦发生了丢包,触发重传机制,一个连接中的所有HTTP请求都要等这个重传的包。也就是说一旦发生丢包,所有的HTTP请求都会阻塞。
HTTP/3的改进
HTTP/3把TCP改成了UDP,基于UDP的QUIC协议能实现类似TCP的可靠传输。