Edited at
http2Day 15

IISのhttp2サポートについてちょっとだけ

More than 1 year has passed since last update.

この記事はhttp2 Advent Calendar 2015の15日目の記事です。

Disclaimer: Windowsの記事です。


WindowsとHTTP/2

WindowsがHTTP2をサポートすることが明らかになったのは2014年10月でした。Windows 10とWindows Server 2016のTechnical Previewが公開された時点で、IE11とIISにHTTP2が試験実装されていました。その後、Windows 10は製品版がリリースされましたが、Windows Server 2016はまだリリース日を迎えていません。2015年12月時点の、HTTP/2をサポートするWindowsはこちらです。


HTTP.sys

実際にはIISがHTTP/2に対応したというより、HTTPカーネルモードドライバ(HTTP.sys)がHTTP/2に対応したというのが正しいです。HTTP.sysについては説明記事をちょっとだけ書きました。独自のサーバーアプリケーションからHTTP.sysを利用するには、HTTP Server APIを呼び出します。HTTP Server APIについてはMSDNの以下のページを起点に見ていくといいでしょう。


Windows 10で試す

IISのHTTP2をWindows 10で試してみたい場合は、以下のようにします。(参考:David So's Blog - HTTP/2 on IIS

「コントロールパネル」から「Windowsの機能の有効化または無効化」を選び、「インターネット インフォメーション サービス」を有効にします。

step1

インストールが完了したら「インターネット インフォメーション サービス(IIS) マネージャ」を起動し、機能ビューで「サーバー証明書」を選びます。

step2

操作ウィンドウで「自己署名入り証明書の作成」をクリックします(Let's Encryptなどでもいいのですが手作業が多く発生するので、ここはIISの自己署名証明書でいいでしょう)。

step3

「Default Web Site」で「サイトの編集」→「バインド…」をクリックして、新しくTLSバインディングを追加します。証明書には、先ほど作成した自己署名証明書を指定します。

step4

この状態で、https://localhost/ にアクセスすれば、HTTP/2が使われます。


WebアプリケーションのフロントWebサーバーとしてIISを使う

HTTP/2には依存しない話ですが……

クラシックASPやASP.NETを動かす場合の話は省略します。

PHPを動かす場合はFastCGIを使います。(ISAPI拡張+スレッドセーフPHPの組み合わせはオワコンです。)

それ以外のプラットフォーム(Java, Ruby, Python, Perl, Goなどなど)の場合は、HttpPlatformHandlerを構成します。


詳しくは

shibayanが日本語の記事をいくつか書いています(2014年のTechnical Previewの頃から不定期に書かれています)のでそちらも参照するとよいでしょう。