-
-
HTTP管线模型 HTTP Pipelining
允许客户端发出多个请求,然后服务器端按顺序返回响应,这个方案看似很美好,但现实中几乎没有浏览器会用这个方案。这个模型对解决队头堵塞几乎没有帮助,还可能会导致一些潜在的安全问题,性能提升也不高。(个人认为原因是,返回响应是服务器按顺序返回的,只是允许客户端同时发起多个请求,在实际效率上并不能起到明显的提升,还是得按顺序一个个等响应)
-
HTTP 2 使用了帧的概念 以下是 除了多路复用外 带来的额外好处
- 调整响应传输的优先级
- 头部压缩
- Server Push
-
HTTP3
-
QUIC (Quick UDP Internet Connection) 将TLS作为自身的一部分,解决了之前TCP 和 TLS 需要各自握手的问题
-
也吸取了HTTP2中流的概念,在QUIC中提供了互相独立的流,解决了原先TCP队头堵塞的问题
-
引入了新的机制,可以实现首次连接1RTT,后续连接0RTT
-
从名字中不难发现,QUIC是基于UDP进行实现的,为什么不重新设计一个协议的,而是要基于现有协议进行开发捏?
原因是,现有设备都对TCP和UDP有着较好的支持,如果完全重新设计一个协议,需要相当长的一段时间才能被大范围地使用,所以trade off 之后,是在UDP基础上设计出了QUIC
-
现存网络设备对TCP 和 UDP 支持已经僵化
-
UDP 不靠谱但是 QUIC 靠谱
-
QUIC可以为除 HTTP 协议以外的应用层协议提供支持
-
-
-
HTTP3首次与非首次连接的所需的RTT
-
首次:HTTP 3: QUIC - 1 RTT
(
QUIC 第一次访问
- HTTP 客户端:我要和大哥说话!
- QUIC 客户端:嗨!服务端,你在吗?在的话能给我把钥匙吗?
- QUIC服务端:嗨!客户端,我在,这是你的钥匙!
- HTTP 客户端:今天这么快?我要 index.html!
- QUIC 服务端(偷偷地告诉客户端):这还有把钥匙,下次找我可以不用问,直接用
)
-
非首次:HTTP: QUIC - 0 RTT
(
QUIC 第二次访问
- HTTP 客户端:我要和大哥说话!
- QUIC 客户端:嗨!服务端,你在吗?后面的话我已经用上次你给我的钥匙加密 过了,HTTP 那小子肯定要 indexhtmil!
- QUIC服务端:嗨!客户端,我在,我知道你要 index html,给你!
- HTTP 客户端:?
)
-