HTTP2 中的动态 Table 更新过程
Dynamic Table Updation Procedure in HTTP2
我们对我们对HTTP2协议栈的理解有疑问
用于动态 Table 更新。我们想清楚地了解
在远程端发送的情况下更新动态 table 的过程
header 个序列中的帧。
抱歉英语不好,希望您能理解我们的担忧。
场景:
- 假设远端'R'想发送两个请求R1和R2,但是由于
window limit R1被拆分为两帧R1-F1和R1-F2.
- 远程端'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
- R1-F1
- R2
- 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.
这意味着在您的情况下,有效的帧序列必须是:
- R1-F1
- R1-F2
- R2
一旦顺序正确,更新 HPACK 动态 table 不是问题,因为请求 headers 总是完整且顺序的。
我们对我们对HTTP2协议栈的理解有疑问 用于动态 Table 更新。我们想清楚地了解 在远程端发送的情况下更新动态 table 的过程 header 个序列中的帧。
抱歉英语不好,希望您能理解我们的担忧。
场景:
- 假设远端'R'想发送两个请求R1和R2,但是由于 window limit R1被拆分为两帧R1-F1和R1-F2.
- 远程端'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
- R1-F1
- R2
- 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.
这意味着在您的情况下,有效的帧序列必须是:
- R1-F1
- R1-F2
- R2
一旦顺序正确,更新 HPACK 动态 table 不是问题,因为请求 headers 总是完整且顺序的。