しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows Server Technical Preview の IIS というか http.sys が HTTP/2 に対応していたらしい

Windows Server Technical Preview には正直あまり興味が無かったんですが、今日に IIS でも HTTP/2 が使えたという話が Twitter で流れてきたので早速 Azure の仮想マシンに入れて試しました。

SPDY も HTTP/2 も SSL 上に作られているので、基本的に https が必須です。つまり IIS で https のバインディングを追加しないと有効にならないので気が付きにくそうです。

f:id:shiba-yan:20141006213345p:plain

こんな感じで 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 で通信していることが分かります。

f:id:shiba-yan:20141006213344p:plain

IE11 では SPDY/3 に対応しつつもサーバー側が非対応だったので、次期 Windows Server のリリースに期待が高まります。

Chrome

最初にベータリリースの 38 を使って SPDY/4 を有効にした状態で試しましたが、残念ながら HTTP/2 は有効になってくれませんでした。既に書いたように Draft 14 を IIS が実装していたので、そこで違いが発生していたようです。

なので Chrome の Canary 版を入れてみたところ、問題なく HTTP/2 で通信が行えました。

f:id:shiba-yan:20141006213342p:plain

Firefox

Nightly ビルドをインストールして確認したところ、特に設定も必要なく HTTP/2 で通信が行えました。

f:id:shiba-yan:20141006213343p:plain

http.sys 絡み

IIS の HTTP 周りは http.sys というドライバが処理を受け持っているはずなので、同じ http.sys を使う HttpListener でも HTTP/2 が有効になるのではと思ったので確認してみました。

f:id:shiba-yan:20141006222338p:plain

予想通り https の場合には HTTP/2 が有効になったので、IIS というよりも http.sys が HTTP/2 に対応したというのが正しいです。

f:id:shiba-yan:20141006213341p:plain

当然ながら ASP.NET アプリケーションでも、特別な対応無しに HTTP/2 の恩恵に与れます。