Я хочу знать на стороне сервера, поддерживает ли браузер протокол http2.
Как это можно сделать? Могу ли я как-то запросить браузер (со стороны сервера/клиента)?
Я хочу знать на стороне сервера, поддерживает ли браузер протокол http2.
Как это можно сделать? Могу ли я как-то запросить браузер (со стороны сервера/клиента)?
Браузеры, отправляющие запросы 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. .
Некоторые серверы предлагают поддержка.
В противном случае вы всегда можете использовать строку пользовательского агента и выполнить некоторое сопоставление строк с вырезками версий для известных пользовательских агентов. Например, я знаю, что curl поддерживает HTTP/2, начиная с версии 7.43. Как правило, версии основных браузеров, выпущенные после лета 2015 года, должны поддерживать HTTP/2.