有什么方法可以检测远程网站是否支持SPDY以及它是什么版本?
我可以在命令行中使用某些内容,例如bash脚本。
尝试使用curl发送自定义User-Agent标头,但无法获得任何可以帮助我的响应标头。
我们的想法是能够获得SPDY:真/假版本:3.1 / 3.0 ...适用于任何领域。
答案 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.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)支持使用ALPN补丁的NPN(因为无论如何都需要HTTP 2.0)。
NPN最终将逐渐消失;谷歌的亚当兰利has stated认为NPN将被弃用,以支持ALPN。