Как определить, поддерживает ли браузер http2?

Я хочу знать на стороне сервера, поддерживает ли браузер протокол http2.

Как это можно сделать? Могу ли я как-то запросить браузер (со стороны сервера/клиента)?


person Illidan    schedule 31.07.2016    source источник


Ответы (2)


Браузеры, отправляющие запросы HTTP/2, отправляют строку версии протокола HTTP в строке запроса:

GET / HTTP/2.0
Host: domain.com

Браузеры, отправляющие запросы HTTP/1.1, отправляют его следующим образом:

GET / HTTP/1.1
Host: domain.com

В зависимости от того, какой API вы используете на сервере, вы сможете запросить версию протокола запроса и получить значение для этого конкретного запроса.

Например, если вы используете Servlet API на сервере, вы можете сделать:

String protocol = httpServletRequest.getProtocol();
if (protocol.startsWith("HTTP/2")) {
    // Your logic here.
}

Кроме того, вы можете запросить у сервера согласованный протокол ALPN для конкретного соединения.

Этот API недоступен в API Servlet (пока), но вы можете получить эту информацию из API конкретного поставщика.

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

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

person sbordet    schedule 31.07.2016

Некоторые серверы предлагают поддержка.

В противном случае вы всегда можете использовать строку пользовательского агента и выполнить некоторое сопоставление строк с вырезками версий для известных пользовательских агентов. Например, я знаю, что curl поддерживает HTTP/2, начиная с версии 7.43. Как правило, версии основных браузеров, выпущенные после лета 2015 года, должны поддерживать HTTP/2.

person dsign    schedule 31.07.2016
comment
например, IE11 в Windows 7 не поддерживает HTTP2, а в Windows 10 поддерживает. Могу ли я узнать это от пользовательского агента? - person Illidan; 31.07.2016
comment
@Illidan Хороший вопрос. Извините, что не смог помочь дальше. - person dsign; 31.07.2016