HTTP サーバー API の概要

次の一覧では、HTTP Server API を使用する一般的な一連の操作を示します。

URL を使用する操作では、使用する必要がある HTTP_REQUEST_V1 構造体の CookedUrl メンバーに含まれる処理済み URL であることに注意してください。 pRawUrl メンバーで未処理の URL を使用しないでください。これは、追跡と統計的目的専用です。

各アプリケーションは、独自の要求キューを作成します。 アプリケーションは、HttpCreateHttpHandleから要求キュー ハンドル取得します。 このハンドルを HttpAddUrl 関数に渡して、要求キューに URL を追加します。 アプリケーションは受信要求の通知を受信し、要求キュー ハンドルを使用して httpReceiveHttpRequest関数呼び出して要求キューから取得します。 この関数を使用して、要求ヘッダー、またはヘッダーとエンティティ本文の両方を受信できます。 HttpReceiveHttpRequestは、要求ハンドルに固有の受信要求の要求識別子 (RequestId) も返します。

手記

アプリケーションは、関連するすべての要求ヘッダー (使用されている場合はコンテンツ ネゴシエーション ヘッダーを含む) を調べ、ヘッダー コンテンツに基づいて要求を適宜失敗させる必要があります。 HTTP サーバー API では、各ヘッダー行が正しく終了することだけが保証され、無効な文字は含まれません。

 

HttpReceiveRequestEntityBody 関数と要求キュー ハンドルを使用して、要求のエンティティ本文の後続の部分 (存在する場合) を取得します。

手記

HTTP サーバー API は、受信側でチャンクされたメッセージをデコードしますが、送信側ではチャンク エンコードを実行しません。 送信側でチャンクが必要な場合、アプリケーションはそれを実装する必要があります。 チャンク エンコードの詳細については、RFC 2616 を参照してください。

 

HttpReceiveClientCertificate 関数を、セキュリティで保護されたスキーム ("https") を使用して URL を提供するアプリケーションと共に使用して、必要に応じてクライアントの証明書情報を取得します。

応答は、HttpSendHttpResponse 関数と共に送信されます。 この関数は、対応する要求の RequestId を使用して応答を送信します。 HttpSendResponseEntityBody 関数を最初に受信した要求から RequestId と共に呼び出すことで、時間の経過と共に複数の API 呼び出しで応答を送信できます。

手記

既定では、HttpSendHttpResponse では、"Server:" ヘッダーとして "Microsoft-HTTPAPI/1.0" が使用されます。 アプリケーションが応答でサーバー ヘッダーを指定した場合、その値はサーバー ヘッダーの最初の部分として配置され、その後にスペースと "Microsoft-HTTPAPI/1.0" が続きます。

 

一般に、HTTP Server API では、接続管理とその確立と破棄の詳細がアプリケーションに表示されなくなります。 ただし、アプリケーションは必要に応じて HttpWaitForDisconnect呼び出すことによって接続の終了を検出できます。

アプリケーションは、次の手順を使用してクリーンアップする必要があります。

  • アプリケーションが URL をリッスンまたは応答していない場合は、HttpRemoveURL 関数を使用して URL が削除されます。
  • アプリケーションが要求キューの使用を終了したら、CloseHandle 関数を使用して要求キュー ハンドルを閉じます。
  • HTTP Server API を使用してアプリケーションが終了したら、httpTerminate関数呼び出します。