Windows Server Technical Preview には正直あまり興味が無かったんですが、今日に IIS でも HTTP/2 が使えたという話が Twitter で流れてきたので早速 Azure の仮想マシンに入れて試しました。
IISもHTTP2喋るぞ!! pic.twitter.com/keYrGk0baj
— ゆき (@flano_yuki) 2014, 10月 6
SPDY も HTTP/2 も SSL 上に作られているので、基本的に https が必須です。つまり IIS で https のバインディングを追加しないと有効にならないので気が付きにくそうです。
こんな感じで https のバインディングを追加してあげれば、勝手に HTTP/2 が使われるようになりました。
ちなみに HTTP/2 の Draft 13 に対応している Chrome だと有効にならなかったので、IIS はラストコールになった Draft 14 を実装しているようです。
HTTP/2がHTTPbisワーキンググループのラストコールに - Publickey
何となくメジャーなブラウザと HTTP/2 で通信できるのか確認してみました。
Internet Explorer
Windows 10 の IE から HTTP/2 に対応したことが IEBlog にて公表されてます。
HTTP/2
Internet Explorer on the Windows 10 Technical Preview includes support for new the HTTP/2 networking protocol which is a standardized effort with broad industry support. HTTP/2 builds on our experience delivering SPDY/3 support in IE11 and enables improved performance on the Web using techniques including multiplexing, header compression and Server Push.
Internet Explorer and the Windows 10 Technical Preview - IEBlog - Site Home - MSDN Blogs
F12 開発ツールでネットワークを確認すると HTTP/2 で通信していることが分かります。
IE11 では SPDY/3 に対応しつつもサーバー側が非対応だったので、次期 Windows Server のリリースに期待が高まります。
Chrome
最初にベータリリースの 38 を使って SPDY/4 を有効にした状態で試しましたが、残念ながら HTTP/2 は有効になってくれませんでした。既に書いたように Draft 14 を IIS が実装していたので、そこで違いが発生していたようです。
なので Chrome の Canary 版を入れてみたところ、問題なく HTTP/2 で通信が行えました。
Firefox
Nightly ビルドをインストールして確認したところ、特に設定も必要なく HTTP/2 で通信が行えました。
http.sys 絡み
IIS の HTTP 周りは http.sys というドライバが処理を受け持っているはずなので、同じ http.sys を使う HttpListener でも HTTP/2 が有効になるのではと思ったので確認してみました。
予想通り https の場合には HTTP/2 が有効になったので、IIS というよりも http.sys が HTTP/2 に対応したというのが正しいです。
当然ながら ASP.NET アプリケーションでも、特別な対応無しに HTTP/2 の恩恵に与れます。