Чем отличаются HTTP2-настройки и предисловие к соединению
Содержимое поля заголовка HTTP2-Settings представляет собой полезную нагрузку кадра SETTINGS (раздел 6.5).
а также
После получения ответа 101 клиент ДОЛЖЕН отправить предисловие к соединению (раздел 3.5), которое включает в себя кадр SETTINGS.
Мой вопрос заключается в том, почему клиент отправляет кадр SETTINGS дважды на сервер? Благодарю.
1 ответ
HTTP/2 придает большое значение обмену SETTINGS прежде всего, поэтому у меня сложилось впечатление, что HTTP2-Settings служит для информирования сервера об условиях клиента, прежде чем сервер даже согласится переключиться на HTTP/2.
Второй фрейм SETTINGS, вероятно, предназначен для единообразия, поэтому после завершения обновления с HTTP/1.1 будет проведен унифицированный сеанс HTTP/2, начинающийся с SETTINGS, такой же, как при использовании протокола TLS+ALPN или обычного HTTP/2 с предыдущим знанием., В спецификации не сказано, какие настройки должны быть в любом из кадров, AFAICT, поэтому один из них может быть пустым (что фактически указано в спецификации, раздел 3.5).
Эта избыточность является небольшой платой: 9 байт на соединение по сравнению с трудностями, которые могут возникнуть из-за наличия немного отличающихся реализаций HTTP/2 для случаев, когда есть обновление с HTTP/1.1, по сравнению со случаями, когда нет,
Обратите внимание, что хотя некоторые инструменты фактически используют HTTP/2 поверх простых соединений, действительно интересные случаи, например, браузеры, всегда будут использовать TLS+ALPN.