如何检测服务器是否正在使用SPDY

时间:2014-05-19 16:37:05

标签: linux spdy

有什么方法可以检测远程网站是否支持SPDY以及它是什么版本?

我可以在命令行中使用某些内容,例如bash脚本。

尝试使用curl发送自定义User-Agent标头,但无法获得任何可以帮助我的响应标头。

我们的想法是能够获得SPDY:真/假版本:3.1 / 3.0 ...适用于任何领域。

2 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:7)

SPDY协议协商在初始TLS握手期间发生。

目前有两种方式可以协商协议:较旧的协议称为NPN(http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-04)。 在ClientHello TLS消息中,客户端发送ID为0x3374的NPN扩展。服务器回复ServerHello TLS消息,该消息还包含服务器在NPN扩展中也支持的协议列表。 然后,客户端选择协议并将其选择(加密)发送到服务器。

较新的方法是为HTTP 2.0设计的,称为ALPN(http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-05)。 ClientHello TLS消息包含ID为0x10的ALPN扩展。 客户端此次发送支持的协议列表,服务器回复ServerHello TLS消息,该消息包含服务器选择的协议,也在ALPN扩展中。

在NPN和ALPN扩展中,协议列表以http/1.1spdy/3等字符串形式发送。

一旦选择了协议,TLS握手就会继续,然后双方将立即开始说出他们所选择的协议。

因此,了解协议协商的唯一方法是使用TLS并使客户端公开协议协商扩展。 每个客户端都以特定的方式执行此操作,但据我所知,还没有对bash脚本的支持。

例如,HAProxy支持NPN和ALPN(http://cbonte.github.io/haproxy-dconv/configuration-1.5.html)和Jetty 9.2也支持NPN和ALPN(包括客户端和服务器)。

其他服务器(如Nginx或Apache)支持使用ALPN补丁的NPN(因为无论如何都需要HTTP 2.0)。

NPN最终将逐渐消失;谷歌的亚当兰利has stated认为NPN将被弃用,以支持ALPN。