Как определить, использует ли сервер SPDY

Любой способ определить, поддерживает ли удаленный веб-сайт SPDY и какую версию он имеет?

Что-то я могу использовать из командной строки, например, bash script.

Пробовал отправлять пользовательские заголовки User-Agent с curl, но не смог получить какие-либо заголовки ответов, которые мне помогли.

Идея состоит в том, чтобы иметь возможность получить SPDY: true/false Версия: 3.1/3.0... для любого домена.

Ответ 1

openssl s_client -connect google.com:443 -nextprotoneg ''
CONNECTED(00000003)
Protocols advertised by server: spdy/3.1, spdy/3, http/1.1

Ответ 2

Согласование протокола SPDY происходит во время начального рукопожатия TLS.

В настоящее время существует два способа согласования протокола: старший из них называется NPN (http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-04). В сообщении ClientHello TLS клиент отправляет расширение NPN с идентификатором 0x3374. Сервер отвечает сообщением ServerHello TLS, которое также содержит список протоколов, поддерживаемых сервером, также в расширении NPN. Затем клиент выбирает протокол и отправляет свой выбор, зашифрованный, на сервер.

Новый метод был разработан для HTTP 2.0 и называется ALPN (http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-05). Сообщение ClientHello TLS содержит расширение ALPN с идентификатором 0x10. Клиент на этот раз отправляет список поддерживаемых протоколов, а сервер отвечает на сообщение ServerHello TLS, которое содержит протокол, выбранный сервером, также в расширении ALPN.

В обоих расширениях NPN и ALPN список протоколов отправляется как строки, такие как http/1.1 или spdy/3.

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

Единственный способ узнать о согласовании протокола - значит использовать TLS и иметь клиент, который предоставляет расширения для согласования протокола. Каждый клиент делает это определенным образом, но пока нет поддержки сценариев bash, насколько я знаю.

HAProxy, например, поддерживает как NPN, так и ALPN (http://cbonte.github.io/haproxy-dconv/configuration-1.5.html) и Jetty 9.2 тоже поддерживает как NPN, так и ALPN (как для клиентов, так и для серверов).

Другие серверы, такие как Nginx или Apache, поддерживают NPN с исправлениями для ALPN (поскольку в любом случае он будет необходим HTTP 2.0).

NPN в конечном итоге исчезнет; Google Adam Langley заявил, что NPN будет устаревшим в пользу ALPN.