好问题!
TCP 上的 HTTP/2 存在 TCP 导致的轻微低效问题。考虑以下示例:假设您有 3 个流 A、B 和 C。用小写字母(a、b、c)和序列号表示每个流的数据包(帧)。让我们看看当发送以下序列时,HTTP/2 over TCP 会发生什么:
服务器 ---> a2, c2, b2, *c1, b1, a1 ---> 客户端
其中*c1表示该帧丢失。接收端(客户端)必须等待重新传输丢失的 *c1 帧,然后才能将后面的帧传递到应用层(即 b2,c2,a2),因为通信是通过 TCP 进行的,并且 TCP 保证有序送货!
这与 HTTP/3 和 QUIC 形成鲜明对比,在 UDP 上,这些只是独立的数据包,因此 *c1 的丢失不会延迟 b2、c2 和 a2 到应用层的传送!