HTTP2 中的动态 Table 更新过程

Dynamic Table Updation Procedure in HTTP2

我们对我们对HTTP2协议栈的理解有疑问 用于动态 Table 更新。我们想清楚地了解 在远程端发送的情况下更新动态 table 的过程 header 个序列中的帧。

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

场景:

  1. 假设远端'R'想发送两个请求R1和R2,但是由于 window limit R1被拆分为两帧R1-F1和R1-F2.
  2. 远程端'R'然后按此顺序发送帧
    *) R1-F1
    *) R2
    *) R1-F2

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

或者我们必须为每一帧构建动态 table 而不管 请求的总大小 header ?

Remote End 'R' then send the frames in this sequence

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

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

Any number of CONTINUATION frames can be sent, as long as the preceding frame is on the same stream and is a HEADERS, PUSH_PROMISE, or CONTINUATION frame without the END_HEADERS flag set.

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

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

一旦顺序正确,更新 HPACK 动态 table 不是问题,因为请求 headers 总是完整且顺序的。