[http] 从http1到http3
引言
cloudflare说他们跟google和firefox在开发实现http3。并且tls1.3也是他们推的。
[https://www.cnblogs.com/hugetong/p/13442633.html]
1.0
96年开始http1.0的时代。他有很多缺点.
# 因为是tcp+ssl承载,所以在发送数据包之前需要六个包的握手交互。
# 一个tcp链接只承载一次http交互,然后就断了。而tcp是慢启动的,刚开始都很慢,无法利用带宽。
1.1
1.1有了应用层的keep alive。一个tcp可以交互多次,解决了慢启动和频繁捂手的overhead。
但是还有新的问题:
# request与response是ping pong模式的。无法充分利用tcp的全双工。效率很差。
# 因为ping pong所以都是串行,所以如果想并行就需要多个tcp连接。
2.0
2.0为了解决1.1的问题,而出现。采用多个stream达到并行与全双工的目的,但是依然有缺点:
# tcp并不知道上层http2的多通道复用,所以一个tcp丢包。所有的http2 stream都要等待。
# http2的同一个respons或request的分段成多个frame的header与data仍然需要连续发送。
3.0
3.0为了解决2.0的这个问题。让http3跑在quic之上。http3不在提供多通道功能,而由quic提供,
这样quic就知道http的每一个通道的状态,通道彼此独立,不再干扰。
另外的特性:
# quic将tcp与tls的握手融合在一起,三个包就同时完成了传输层与加密层的握手。
# 支持连接的迁移。
# 支持zero RTT,握手还没建立之前,就开始发送数据。
参考(以上全部内容都来自这里):https://blog.cloudflare.com/http3-the-past-present-and-future/