任何方式來檢測遠程網站是否支持SPDY和它是什麼版本?如何檢測服務器是否使用SPDY
我可以在命令行中使用一些東西,如bash腳本。
試以自定義的User-Agent頭,捲曲,但不能得到任何響應頭,這將有助於我的。
這個想法是能夠得到SPDY:true/false版本:3.1/3.0 ...爲任何域。
任何方式來檢測遠程網站是否支持SPDY和它是什麼版本?如何檢測服務器是否使用SPDY
我可以在命令行中使用一些東西,如bash腳本。
試以自定義的User-Agent頭,捲曲,但不能得到任何響應頭,這將有助於我的。
這個想法是能夠得到SPDY:true/false版本:3.1/3.0 ...爲任何域。
openssl s_client -connect google.com:443 -nextprotoneg ''
CONNECTED(00000003)
Protocols advertised by server: spdy/3.1, spdy/3, http/1.1
如果您使用的是openssl 0.9.8,此命令將不起作用。如果您在Mac上,則可以使用brew更新openssl:http://apple.stackexchange.com/a/126832/78754 – jdorfman
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貼片(因爲其將通過HTTP 2.0需要反正)爲NPN支持。
NPN最終會消失;谷歌的Adam Langley has stated NPN將被棄用,以支持ALPN。
你要編寫一個程序來做到這一點,或者你想要這個程序爲你寫? –
我希望有一些東西可以用在bash腳本中。 – Jim