HTTP1.0、HTTP1.1、HTTP2 、HTTP3区别
- HTTP1.1相比HTTP1.0:
- 多种缓存处理的请求头
- 增加Range支持分片资源传输
- 增加Host头支持Host域名对应多个ip地址
- 支持长连接(Connection: keep-alive)和请求流水线(Pipelining)处理(但是请求和响应报文的序列必须一致,有可能会导致队首阻塞),可以发送多个请求。
- HTTP2相比HTTP1.1:
- 头部压缩:客户端和服务端维护一个头部字典(哈夫曼编码等压缩算法),将重复的头部压缩字节。
- 采用二进制编码,减少http数据包体积。
- 多路复用,支持多个请求并发,通过给每个请求分配不同的stream,不存在队阻塞的问题。
- 服务端推送。
- HTTP3相比HTTP2:
- 使用UDP协议,由于HTTP2采用TCP协议,如果一个stream的请求丢失,其余stream请求会因为等待重传而阻塞(需要等待所有序列的包到了才能组包,但是丢失的包和其他的stream没关系),使用UDP则不会产生影响。
- QUIC协议:由于UDP无法保证可靠性,因此数据包的完整性需要靠顶上协议保证(超时重传等机制)
- 可变ip和端口:QUIC协议自己设置了一个流标识用来表示某一个请求,而不是依靠TCP的四元组(目标地址、目标端口、源地址、源端口),因此就算端口号变了但是只要分配的流不变,可以认为是同一个客户端请求(例如4G信号切换到wifi)。
HTTPS原理 : 首先HTTPS可以说是不属于HTTP协议的,可以认为其是HTTP协议的应用协议,主要功能是为了保证信息的安全性。
- 如何保证信息的安全性?使用加密算法,对于对称加密来说,需要让密钥在信道上传输,本身就不安全了,因此只能采用非对称加密,但是非对称加密算法计算太耗时间,因此非对称加密只用来加密传输对称密钥,只有就可以使用对称密钥通信。
- 如何保证非对称密钥传输的安全性?对于客户端而言,获取得到服务端的公钥去加密自己的请求信息,首先要保证拿到的公钥是正确的,假如公钥是中间人伪造的,那中间人获得客户端的请求信息并伪造成客户端与服务器通信,因此需要对服务端的公钥进行验证,主要是需要对服务器的信息和其对应的公钥进行签名,而负责签名的机构就是CA机构,签名就是对服务端的信息和其公钥进行一个MD5,然后将这份原数据和MD5一起交由CA机构用它们的私钥加密。因此客户端可以通过对应CA机构的公钥去解密签名文件,比较MD5和原数据是否一致来判断证书是否可信。
- 如何保证CA机构的公钥安全?由于我们需要拿到CA的公钥才能验证签名文件的正确,这又回到了之前保证服务端公钥正确的问题,我们需要验证CA机构的证书,因此CA机构也需要另一个机构去签名验证,这样层层嵌套就形成了证书链,最终会查询到我们系统自带的根证书。
- 抓包软件的原理:通过安装自己的证书链,对客户端伪造成服务端,对服务端伪造成客户端。