http2 повторяющиеся записи в динамической таблице
в RFC для hpack сказано так...
The dynamic table can contain duplicate entries (i.e., entries with the same name and same value). Therefore, duplicate entries MUST NOT be treated as an error by a decoder
в таблице, поскольку статическая и динамическая таблицы являются одним (через индексное адресное пространство в RFC), означает ли это, что если у меня есть заголовок: headername: headervalue в индексе 75, то я сталкиваюсь с ним в новом запросе, я также должен добавить в динамическую таблицу, хотя она уже имеет индекс 75? Если да, то на какой из них я бы ссылался, индекс 75 или самый новый индекс? Затем, что произойдет, если я столкнусь с заголовком с тем же именем, но с новым значением для каждого запроса, могу ли я сохранить имя заголовка, которое никогда не меняется в динамической таблице, а затем использовать этот индекс для декодирования только имени заголовка?
1 ответ
означает ли это, что если у меня есть заголовок: имя заголовка: значение заголовка в индексе 75, то я сталкиваюсь с ним в новом запросе, я также должен добавить его в динамическую таблицу, хотя он уже находится в индексе 75?
В идеале вы не должны. Это пустая трата места. Но вы МОЖЕТЕ сделать это, если хотите и у вас есть веская причина.
Если да, то на какой из них я бы ссылался, индекс 75 или самый новый индекс?
Вы можете использовать любой из них. Каждый одинаково действителен. И на самом деле веб-браузеры иногда реализуют это по-разному, как показано в этом вопросе: Странная кодировка HTTP/2 HPACK в Firefox
Затем, что произойдет, если я столкнусь с заголовком с тем же именем, но с каждым запросом, имеющим новое значение, могу ли я сохранить имя заголовка, которое никогда не меняется в динамической таблице, а затем использовать этот индекс для декодирования только имени заголовка?
Да, вы могли бы. В идеале такие поля следует отправлять с литеральным полем заголовка без индексирования (или аналогичным синтаксисом литерального поля заголовка, никогда не индексируемого ), чтобы предотвратить заполнение динамической таблицы бесполезными одноразовыми значениями. Однако это также означало бы, что имя заголовка также не будет проиндексировано, поэтому вы не сможете найти его, как надеялись.