http的1.0 1.1的区别
连接复用:1.0每个请求都需要建立一个新的 TCP 连接,请求结束后立即关闭连接。1.1支持连接复用(持久连接),可以在一个连接上发送多个请求和响应,并且配套了流水线机制
流水线机制:多个连接共用一个tcp请求时,必须等待前一个请求响应返回后才能发送下一个请求,类似流水线。但依旧存在响应阻塞和死锁的问题。
块传输:1.1引入了分块传输编码机制,传输大文件时可以分块传输,从而减少网络拥堵
host头部:1.1引入了host头部,可以在同一个IP地址下支持多个域名,提高服务器的利用率
缓存机制:1.1提供了更多的缓存机制,除了1.0基于过期时间的缓存策略,还有ETag和If-None-Match等
http的1.1和2.0的区别
多路复用:一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
二进制传输:文本格式的解析比较复杂,因此在解析和处理请求和响应时会消耗大量的 CPU 和内存资源,性能不高。所以HTTP/2 引入了二进制传输,实现方便且健壮,头部可以更加高效地传输和解析,正文可以更加高效地利用网络带宽。
头正拆分和头压缩:HTTP/1.x 中头部信息和正文信息是混合在一起通过文本传输的,所以在传输过程中,如果头部信息没有完全传输完成,那么正文信息就无法传输,这就导致了头部阻塞问题。http2将请求和响应的头部信息和正文信息分开传输,且对头部信息进行压缩,减少了网络传输的数据量。
服务端推送:可以在客户端请求之前主动向客户端发送资源,提高了页面加载速度。
连接复用和多路复用的区别:
http1.1连接复用是指在一个TCP连接上可以发送多个HTTP请求和响应,避免为每个请求和响应建立新的连接,但是要求响应和请求的顺序是一致的。类似流水线。
http2.0的多路复用中响应和请求则可以乱序到达,原因一个request对应一个id,接收方通过id去归属。
适用场景区分:
HTTP/1.0适用于较为简单的网络应用场景,因为每个请求都要新建一个连接,所以高并发场景性能较差。
HTTP/1.1 适用于大多数的网络应用场景,通过连接复用,提升了性能,但是数据传输效率仍然有限。
HTTP/2.0适用于高并发、大流量的网络应用场景。HTTP/2.0支持多路复用、二进制传输、头部压缩、服务器推送等新特性,可以大幅提高网络传输效率和安全性。但是,HTTP/2.0需要服务器和客户端都支持,且在低带宽、高延迟的网络环境下可能会出现性能问题。
skywalking默认使用的是http2,因为使用了grpc,只有http2才支持。
实际场景:
前端伙伴发现网页并发对竞赛服务端请求过多时,会出现请求pending,要求服务端从http1.1配置成http2,可以提升性能?
如果是使用http1.1,前端在浏览器中请求后端的时候,目前浏览器有最多同时6个http连接的限制,多的连接就会pending,本质是阻塞,只有有http请求结束才会进行下一个;
但是如果使用http2,可以使用其多路复用的功能,此时就不会有6个连接的限制,因为多路复用可以有效节约带宽,且可以大大提升性能。