この記事は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の以下のページを起点に見ていくといいでしょう。
- HTTP Server API
-
HTTP Server API Version 2.0 Reference
- 例: Server Push用の
HttpDeclarePush
関数
- 例: Server Push用の
Windows 10で試す
IISのHTTP2をWindows 10で試してみたい場合は、以下のようにします。(参考:David So's Blog - HTTP/2 on IIS )
「コントロールパネル」から「Windowsの機能の有効化または無効化」を選び、「インターネット インフォメーション サービス」を有効にします。
インストールが完了したら「インターネット インフォメーション サービス(IIS) マネージャ」を起動し、機能ビューで「サーバー証明書」を選びます。
操作ウィンドウで「自己署名入り証明書の作成」をクリックします(Let's Encryptなどでもいいのですが手作業が多く発生するので、ここはIISの自己署名証明書でいいでしょう)。
「Default Web Site」で「サイトの編集」→「バインド…」をクリックして、新しくTLSバインディングを追加します。証明書には、先ほど作成した自己署名証明書を指定します。
この状態で、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の頃から不定期に書かれています)のでそちらも参照するとよいでしょう。
- Windows Server Technical Preview の IIS というか http.sys が HTTP/2 に対応していたらしい - しばやん雑記
- Windows Server Technical Preview の IIS というか http.sys の HTTP/2 有効 / 無効を切り替える方法 - しばやん雑記
- IIS 10.0 と ASP.NET 4.6 で HTTP/2 のサーバープッシュが使えるようになっていたので試した - しばやん雑記
- Windows Server Technical Preview 2 と ARR 3.0 を組み合わせて HTTP/2 対応のリバースプロキシにしてみた - しばやん雑記