Web/DB プログラミング徹底解説

ホーム > Windows 徹底解説 > HTTP サーバー API 2.0 を試してみよう (1/2)

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 グループオブジェクト単位で設定が可能です。

HTTP API 2.0 を試してみよう ~ コードの書き換え »