0

我们对动态表更新的 HTTP2 协议栈的理解有疑问。我们希望清楚地了解在远程端按顺序发送头帧的情况下更新动态表的过程。

抱歉英语不好,希望您能理解我们的担忧。

设想 :

  1. 假设远端'R'想要发送两个请求R1和R2,但是由于窗口限制,R1被分成两个帧R1-F1和R1-F2。
  2. 远程端“R”然后按此顺序发送帧
    *) R1-F1
    *) R2
    *) R1-F2

在这种情况下,我想知道何时更新远程端的动态表以及 R1 请求的本地端。就好像我们先更新远端的动态表为R1整体然后R2,那么我们将如何同步本地端的动态表,因为R1在R2之后完全接收。

或者我们必须为每个帧构建动态表,而不考虑请求头的总大小?

4

1 回答 1

0

远程端“R”然后按此顺序发送帧

  1. R1-F1
  2. R2
  3. R1-F2

CONTINUATION这是无效的,正如 HTTP/2帧规范( https://datatracker.ietf.org/doc/html/rfc7540#section-6.10 ) 中所指定的那样:

可以发送任意数量的 CONTINUATION 帧,只要前一帧在同一个流上并且是一个没有设置 END_HEADERS 标志的 HEADERS、PUSH_PROMISE 或 CONTINUATION 帧。

这意味着在您的情况下,有效的帧序列必须是:

  1. R1-F1
  2. R1-F2
  3. R2

一旦顺序正确,更新 HPACK 动态表就不是问题,因为请求标头始终是完整且连续的。

于 2022-02-16T14:18:33.397 回答