1 HTTPS建立连接过程:先建立TCP连接,再建立SSL连接:
HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
2 HTTP3 基于UDP
3 HTTP 由于是明⽂传输,所以安全上存在以下三个⻛险:
窃听⻛险,⽐如通信链路上可以获取通信内容,⽤户号容易没。
篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染,⽤户眼容易瞎。
冒充⻛险,⽐如冒充淘宝⽹站,⽤户钱容易没。
HTTPS 是如何解决上⾯的三个⻛险的?
混合加密的⽅式实现信息的机密性,解决了窃听的⻛险。
摘要算法的⽅式来实现完整性,它能够为数据⽣成独⼀⽆⼆的「指纹」,指纹⽤于校验数据的完整性,解决了篡改的⻛险。
将服务器公钥放⼊到数字证书中,解决了冒充的⻛险。
4 HTTP/1.1 相⽐ HTTP/1.0 性能上的改进:
使⽤ TCP ⻓连接的⽅式改善了 HTTP/1.0 短连接造成的性能开销。
⽀持管道(pipeline)⽹络传输,只要第⼀个请求发出去了,不必等其回来,就可以发第⼆个请求出去,可以减少整体的响应时间。
5 HTTP/2 相⽐ HTTP/1.1 性能上的改进:
(1)头部压缩
HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是⼀样的或是相似的,那么,协议会帮你消除重复的部分。
(2)⼆进制格式
HTTP/2 不再像 HTTP/1.1 ⾥的纯⽂本形式的报⽂,⽽是全⾯采⽤了⼆进制格式,头信息和数据体都是⼆进制,并且统称为帧(frame):头信息帧和数据帧。
(3)数据流
HTTP/2 的数据包不是按顺序发送的,同⼀个连接⾥⾯连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。
每个请求或回应的所有数据包,称为⼀个数据流。
(4)多路复⽤
HTTP/2 是可以在⼀个连接中并发多个请求或回应,⽽不⽤按照顺序⼀⼀对应。
移除了 HTTP/1.1 中的串⾏请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,⼤幅度提⾼了连接的利⽤率。
6 HTTP/3 做了哪些优化
HTTP/2 主要的问题在于,多个 HTTP 请求在复⽤⼀个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以⼀旦发⽣了丢包现象,就会触发 TCP 的重传机制,这样在⼀个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。
这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
7 HTTP2的缺陷
队头阻塞;
TCP 与 TLS 的握⼿时延迟;
⽹络迁移需要重新连接;
8 HTTP3与QUIC
HTTP/3 不仅仅只是简单将传输协议替换成了 UDP,还基于 UDP 协议在「应⽤层」实现了 QUIC 协议,它具有类似 TCP 的连接管理、拥塞窗⼝、流量控制的⽹络特性,相当于将不可靠传输的 UDP 协议变成“可靠”的了,所以不⽤担⼼数据包丢失的问题。
QUIC 协议的优点有很多,这⾥举例⼏个,⽐如:
⽆队头阻塞;
更快的连接建⽴;
连接迁移;