Немного подробнее: сервер HTTP / 2 отправляет контрольные кадры, такие как MAGIC
и SETTINGS
(включая информацию, такую как Максимальное число одновременных потоков и начальный размер окна), и сервер не учитывает клиента, пока они не будут подтвержденыклиент (также в кадре SETTINGS
).
Telnet просто устанавливает TCP-соединение, а затем ждет, пока пользователь выдаст следующие пакеты.
Не видя эти контрольные кадры в течение нескольких секунд, сервер закрывает соединениечерез пару секунд.
Это соответствует RFC 7540, раздел 6.5.3:
Если отправитель кадра SETTINGS не получает подтверждение в разумных пределахвремя МОЖЕТ выдать ошибку соединения (Раздел 5.4.1) типа SETTINGS_TIMEOUT.
Это журнал nghttpd (работает в подробном режиме), когда я подключился через Telnet:
[id=2] [ 34.645] send SETTINGS frame <length=6, flags=0x00, stream_id=0>
(niv=1)
[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[id=2] [ 44.654] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
(last_stream_id=0, error_code=SETTINGS_TIMEOUT(0x04), opaque_data(0)=[])
[id=2] [ 44.654] closed
На самом деле в вашем вопросе кроется ответ, только то, что вы распечатали журнал сервера nghttpd по частям.Сервер отправил кадр GOAWAY
через 10 секунд после отправки кадра SETTINGS
и закрыл соединение TCP.