HTTP1.0/1.1/2.0/3.0

59 阅读2分钟

HTTP1.0

  1. 不是持久连接:每一次请求都会打开一个TCP,用完则被关闭,这样就会导致每一次都要进行三次握手与四次挥手,没有实现对TCP进行复用,会占用很大的宽带。
  2. 不支持请求管道化:每一个新的请求都要等上一个响应回来之后再发送,性能很慢
  3. 不支持HOST头字段:当IP托管了多个网站的时候就不能通过host去区分当前请求是来自哪一个托管的网站

HTTP1.1

  1. 默认启用持久连接(keep-alive):这样子打开的TCP不会被关闭掉,而是会被后续的请求继续复用,支持同时打开多个6-8个TCP连接。
  2. 支持请求管道化:每一个新的请求不需要等上一个响应回来后发送,而是立即发送,但是当同一个的TCP里面有多个连接时还是会被阻塞(Head-of-Line Blocking),因为服务器要对TCP的请求顺序处理,所以当前面的响应处理要花费很多时间的时候,同一个TCP上的后续请求响应处理会被阻塞,直到前面的响应处理完成才继续处理后续的。
  3. 添加了许多新字段功能:比如host/缓存等等
  4. ...

HTTP2.0

  1. 支持多路复用:支持多个请求响应在同一个TCP里面并行处理返回,同时也就不需要多个TCP了,单个TCP就够用了,也减少了三次握手四次挥手了,但是还是会受到TCP的阻塞,因为TCP为了保证数据包按顺序到达,如果数据包丢失,整个数据流会被暂停直到丢失的数据包得到恢复。意味着虽然多个请求并行处理,但它们都共享同一个TCP连接。如果某个请求的响应缓慢或丢包,整个连接的其他流也会受到影响。
  2. 支持服务端推送:当我们请求一个HTML的时候,服务端可以自己预测推送对应的CSS/JS返回
  3. ...

HTTP3.0

  1. 采用QUIC协议,而QUIC是采用UDP,并且QUIC还修复了UDP的数据不准确等等一些缺点,也继续延续了多路复用还不会出现TCP堵塞问题了。
  2. ...