Bytebytego总结的HTTP协议变化。
HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC)
各代HTTP解决的问题:
HTTP 1.0:于1996年最终确定并全面记录。每个对同一服务器的请求都需要单独的TCP连接。
HTTP 1.1:于1997年发布。TCP连接可以保持打开状态以供重用(持久连接),但它并没有解决头部阻塞(HOL)问题。头部阻塞:当浏览器中允许的并行请求数量用完时,后续请求需要等待前一个请求完成。
HTTP 2.0:于2015年发布。通过请求多路复用解决了HOL问题,消除了应用层上的HOL阻塞,但传输层(TCP)上的HOL仍然存在。如上图所示,HTTP 2.0引入了HTTP“流”的概念:一种抽象,允许将多个HTTP交换多路复用到同一个TCP连接上。每个流不需要按顺序发送。
HTTP 3.0:第一份草案于2020年发布。它是HTTP 2.0的继任者。它使用QUIC代替TCP作为底层传输协议,从而消除了传输层中的HOL阻塞。QUIC基于UDP。它将流作为传输层的第一类公民。QUIC流共享同一个QUIC连接,因此创建新流不需要额外的握手和慢启动,但QUIC流是独立交付的,因此大多数情况下影响一个流的丢包不会影响其他流。