Процедура обновления динамической таблицы в HTTP2
У нас есть вопрос относительно нашего понимания стека протокола HTTP2 для динамического обновления таблиц. Мы хотим получить четкое представление о процедуре обновления динамической таблицы в случае, если удаленный конец последовательно отправляет кадры заголовков.
Извините за плохой английский, надеюсь, вы понимаете нашу озабоченность.
Сценарий:
- Предположим, удаленный конец «R» хочет отправить два запроса R1 и R2, но из-за ограничения окна R1 разделен на два кадра R1-F1 и R1-F2.
- Удаленный конец 'R', затем отправьте кадры в этой последовательности
*) R1-F1
*) R2
*) R1-F2
В этом случае я хочу знать, когда обновлять динамическую таблицу на удаленном конце, а также на локальном конце для запроса R1. Как если бы мы сначала обновили динамическую таблицу на удаленном конце для R1 целиком, а затем R2, то как мы будем синхронизировать динамическую таблицу на локальном конце, поскольку R1 полностью получен после R2.
Или мы должны построить динамическую таблицу для каждого кадра независимо от общего размера заголовка запроса?
1 ответ
Удаленный конец 'R', затем отправьте кадры в этой последовательности
- R1-F1
- R2
- R1-F2
Это неверно, как указано в спецификации HTTP/2 для
CONTINUATION
кадры ( https://datatracker.ietf.org/doc/html/rfc7540#section-6.10 ), в которых указано:
Можно отправить любое количество кадров CONTINUATION, если предыдущий кадр находится в том же потоке и является кадром HEADERS, PUSH_PROMISE или CONTINUATION без установленного флага END_HEADERS.
Это означает, что в вашем случае допустимая последовательность кадров должна быть:
- R1-F1
- R1-F2
- R2
После правильной последовательности обновление динамической таблицы HPACK не представляет проблемы, поскольку заголовки запросов всегда являются полными и последовательными.