Понимание значения заголовка HTTP2-Settings, используемого для запросов http/2 и обновления

Я пишу простое приложение, чтобы определить, поддерживают ли определенные веб-сайты http/2.

Основываясь на том, что я прочитал в черновике:

https://tools.ietf.org/html/draft-ietf-httpbis-http2-07#section-3.2

Я должен иметь возможность выполнить запрос на получение, например

GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

а затем, если они поддерживают http/2, ответ должен быть примерно таким:

 HTTP/1.1 101 Switching Protocols
 Connection: Upgrade
 Upgrade: HTTP/2.0

 [ HTTP/2.0 connection ...

Я пытаюсь точно понять, каким должно быть значение заголовка запроса HTTP2-Settings.

Я надеюсь, что кто-то может объяснить, какую информацию следует включать в пример.


person James Moore    schedule 22.05.2015    source источник


Ответы (2)


HTTP/2 достиг статуса официального стандарта.

Вам вряд ли повезет определить, поддерживают ли веб-сайты HTTP/2, используя механизм обновления открытым текстом.

Причина в том, что браузеры не поддерживают этот стиль обновления до HTTP/2 (все они предпочитают использовать ALPN, а не TLS), и, следовательно, ни один из серверов не поддерживает.

[Отказ от ответственности, я коммиттер Jetty и разработчик Jetty HTTP/2]. Например, Jetty поддерживает этот стиль обновления (и даже прямой HTTP/2), см., например, эти тесты, но мы не развертываем их на нашем собственном веб-сайте, https://webtide.com по указанным выше причинам.

Вам не нужно что-то отправлять в этом кадре SETTINGS обновления, вы хотите отправить его только в том случае, если хотите настроить сервер, прежде чем он получит возможность ответить вам HTTP/2, но обычно значения по умолчанию в порядке.

Помните, что в рамках предисловия к соединению клиент должен отправить другой фрейм SETTINGS, который также может быть пустым или содержать параметры конфигурации. Обычно клиентские API HTTP/2, такие как Jetty HTTP2Client позволит вам легко настроить фрейм SETTINGS, который является частью предисловия, потому что он будет использоваться как в механизме обновления, так и Механизм АЛПН.

Минимальное допустимое значение для заголовка HTTP2-Settings — это пустая строка:

GET / HTTP/1.1
Host: host
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings:
User-Agent: whatever

В противном случае вам необходимо создать полезную нагрузку кадра SETTINGS (только байты, определенные здесь , и, следовательно, без заголовка кадра из 9 октетов, определенного здесь), а затем преобразовать эти байты с помощью base64, как указано здесь.

Для целей ваших тестов подойдет пустой заголовок HTTP2-Settings, но, как я уже сказал, вы наверняка не определите, поддерживает ли веб-сайт HTTP/2: ваше обновление не удастся, но веб-сайт вполне может поддержка HTTP/2 через TLS через ALPN.

person sbordet    schedule 22.05.2015

Этот сайт http://nghttp2.org/ принимает незашифрованные соединения HTTP2 (h2c), поэтому:

GET / HTTP/1.1
Host: nghttp2.org
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings:
User-Agent: whatever

Как было предложено sbordet, сервер выдает ответ «101 Switching Protocols».

person Ferares    schedule 12.10.2016