Формат кадра в HTTP/2 выглядит следующим образом (источник: HTTP/2: Формат кадра):
+-----------------------------------------------+
| Length (24) |
+---------------+---------------+---------------+
| Type (8) | Flags (8) |
+-+-------------+---------------+-------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
| Frame Payload (0...) ...
+---------------------------------------------------------------+
R: зарезервированное 1-битное поле. Семантика этого бита не определена, и этот бит ДОЛЖЕН оставаться неустановленным (0x0) при отправке и ДОЛЖЕН игнорироваться при получении.
Идентификатор потока. Идентификатор потока (см. раздел 5.1.1) выражается как 31-битное целое число без знака. Значение 0x0 зарезервировано для кадров, связанных с соединением в целом, а не с отдельным потоком.
Есть ли причина, по которой они не использовали 32-битное целое число без знака? И зачем указывать, что зарезервированный бит должен быть установлен в 0 и должен игнорироваться получателем?
Это просто уступка таким языкам, как Java, в которых нет 32-битного целого числа без знака?