HTTP サーバー API 2.0 を試してみよう (1/2)
この記事では HTTP API のバージョン 2 を使って、簡単な Web サーバーを作ります。
ゼロから作るのではなく、以前書いた 「HTTP API を利用した Web サーバーの開発方法」 のコードを、HTTP API バージョン 2 で書き直します。
使わない理由がない、 HTTP API バージョン 2 の変更
対応 OS は、クライアント OS では Windows Vista 以降、サーバー OS では Windows Server 2008 以降で、 HTTP API のバージョン 2 が利用できます。
この環境の要件さえ満たせば、必ずバージョン 2 を使うべきです。
関数名が変わった
バージョン 2 では関数の名前も整備されました。
以前の資料で、私は HTTP API でリクエストキューを作る関数名の名前が HttpCreateHttpHandle であることを指摘し、 次のように書いていました。
HttpCreateHttpHandle なんて名前ではなく、HttpCreateRequestQueue という名前だったら良かったのに、と思うのは私だけではないでしょう。
やっぱり、マイクロソフトも私と同じように思っていたようで、 バージョン 2 では実際に、リクエストキューを作るための関数名は HttpCreateRequestQueue に変更されました。 ビンゴでした (笑)
※ というか、この API セット自体、HTTP API という名前だったと思うのですが・・・ HTTP サーバー API (HTTP Server API) に変わりました? これまでずっと私が "Server" というのを見落としていたとも思えないのですが・・・ でも、ここはちょっと自信ないので触れないでおきます。(苦笑)
HTTP API 2.0 の主な変更点
上述のようなマイナーな不備の修正に加え、以下のような大きな変更があります。
- 設定オブジェクトによる簡単な設定が可能
「サーバーセッション」が「トップレベル設定オブジェクト」となり、HTTP サーバー API の既定の設定を上書きます。 これについては後述します。 - リクエストキューのプロセス分離が可能
リクエストキューに名前をつけておき、この名前を使って他のプロセスからこのリクエストキューに接続できるようになりました。 - フルカーネルモード SSL
カーネルモード SSL がデフォルトで有効になりました。クライアント証明書を使った相互認証もサポートされます。 - カーネルモード・レスポンスキャッシュ
静的コンテンツのカーネルモードキャッシュが可能です。 - 認証
HTTP_RESPONSE 構造体と HTTP_REQUEST 構造体が認証情報を含むように、更新されました。 - ログ機能
HTTP API 2.0 からログの設定が可能になりました。 - 必要に応じたリクエストキューの開始
要求が来てからリクエストキューを開始することが出来るようになりました。
他にも、ポートシェアリング、ETW のサポート、パフォーマンスカウンターのサポート、などがあるようですが、 大きな変更点は上に書いたような内容です。
設定オブジェクト
この記事で書くような単純なコードを書く場合でも、コードの書き方に影響してくるのが、 この設定オブジェクト (configuration objects) というものです。
バージョン 1 までは、リクエストキューを作って、そのリクエストキューに URL を登録する、 という仕組みでした。しかし、それだときめ細かい設定ができなかったので、 バージョン 2 では「サーバーセッション」「URL グループオブジェクト」 という設定オブジェクトが導入されました。
サーバーセッションが、サーバーワイドの設定です。 サーバーセッションに、URL グループオブジェクトを1個以上ぶら下げます。
サーバーセッション │ ├ URL グループ │ ├ URL グループ │ ...
URL は URL グループに対して追加します。
コネクションタイムアウト、接続数制限、認証、ログ設定等の設定は、 サーバーセッション、または、URL グループオブジェクト単位で設定が可能です。