Назначение полей псевдозаголовка состояло в том, чтобы унифицировать способ передачи информации запроса / ответа в SPDY, а затем в HTTP / 2 (который основан на SPDY).
Когда был разработан SPDY (но также и HTTP / 2), возникла необходимость в транспортировке информации запроса или ответа, отформатированной по-разному.
Заголовки HTTP представляют собой пары (ключ, значение), это просто.
Однако есть понятие метода HTTP. Это первый токен в строке запроса, так что это не кортеж; его ключ определяется его позицией (первый токен), а его значение - это фактические символы, присутствующие в строке запроса, которые образуют первый токен.
То же самое с целью запроса и версией HTTP: они являются вторым и третьим токенами в строке запроса.
Итак, концептуально HTTP-запрос может быть представлен парами таким образом, например:
(method, GET)
(target, /)
(version, HTTP/1.1)
(Connection, close)
(Accept, *)
Однако «метод», «цель» и «версия» не могли использоваться в качестве простых заголовков HTTP, потому что они никогда не были зарезервированы в качестве стандартных имен заголовков HTTP спецификацией HTTP, и люди могли использовать их как пользовательские имена заголовков HTTP (представьте себе REST API с использованием заголовка «версия»).
HTTP / 2 нуждался в способе передачи этих пар однородным образом, в виде пар, потому что это упростило бы (значительно) протокол.
Следовательно, введение специальных имен для дополнительной информации, переносимой строками запроса и ответа. Эта дополнительная информация позиционируется в HTTP / 1.1, но обычная пара в HTTP / 2, что делает HTTP / 2 более однородным в этом отношении: он просто переносит пары. Настолько, что кадр HTTP / 2, содержащий информацию о запросах и ответах, одинаков и называется просто ЗАГОЛОВКИ.
Имена псевдо-заголовков были выбраны, чтобы начинаться с двоеточия, потому что это был бы недопустимый символ для имени заголовка в HTTP / 1.1. HTTP / 1.1 не использует имена псевдозаголовков.
person
sbordet
schedule
17.06.2015