HttpSendHttpResponse 関数 (http.h)
HttpSendHttpResponse 関数は、指定された HTTP 要求に HTTP 応答を送信します。
構文
HTTPAPI_LINKAGE ULONG HttpSendHttpResponse(
[in] HANDLE RequestQueueHandle,
[in] HTTP_REQUEST_ID RequestId,
[in] ULONG Flags,
[in] PHTTP_RESPONSE HttpResponse,
[in, optional] PHTTP_CACHE_POLICY CachePolicy,
[out] PULONG BytesSent,
[in] PVOID Reserved1,
[in] ULONG Reserved2,
[in] LPOVERLAPPED Overlapped,
[in, optional] PHTTP_LOG_DATA LogData
);
パラメーター
[in] RequestQueueHandle
指定した要求の取得元の要求キューへのハンドル。 要求キューが作成され、そのハンドルが HttpCreateRequestQueue 関数の呼び出しによって返されます。
Windows Server 2003 SP1 と Windows XP SP2: 要求キューへのハンドルは、 HttpCreateHttpHandle 関数によって作成されます。
[in] RequestId
この応答が対応する HTTP 要求の識別子。 この値は、HttpReceiveHttpRequest 関数の呼び出しによって、HTTP_REQUEST構造体の RequestId メンバーで返されます。 この値を HTTP_NULL_IDすることはできません。
[in] Flags
このパラメーターには、次のフラグ値の組み合わせを指定できます。 相互に排他的なものは、それに応じてマークされます。
Flags | 説明 |
---|---|
|
この応答を送信した後、ネットワーク接続を切断し、使用中の HTTP のバージョンに関連付けられている永続的な接続機能をオーバーライドする必要があります。 注意httpSendHttpResponse 関数の 1 回の呼び出しでHTTP_SEND_RESPONSE_FLAG_DISCONNECTとHTTP_SEND_RESPONSE_FLAG_MORE_DATAを組み合わせると、未定義の結果が生成されます。
|
|
この応答の追加のエンティティ本文データは、 HttpSendResponseEntityBody に対する 1 つ以上の後続の呼び出しを通じてアプリケーションによって送信されます。 エンティティ本文データを送信する最後の呼び出しでは、このフラグを 0 に設定します。
注意httpSendHttpResponse 関数の 1 回の呼び出しでHTTP_SEND_RESPONSE_FLAG_DISCONNECTとHTTP_SEND_RESPONSE_FLAG_MORE_DATAを組み合わせると、未定義の結果が生成されます。
|
|
このフラグを使用すると、応答ごとにカーネル内のデータをバッファリングできます。
同期 I/O を実行しているアプリケーション、または一度に 1 つ以上の未処理の送信がない非同期 I/O を実行するアプリケーションで使用する必要があります。 非同期 I/O を使用し、一度に複数の送信が未処理である可能性があるアプリケーションでは、このフラグを使用しないでください。 このフラグを設定する場合は、 HttpSendResponseEntityBody 関数の呼び出しでも一貫して使用する必要があります。 Windows Server 2003: このフラグはサポートされていません。 このフラグは、WINDOWS Server 2003 SP1 の新機能です。 |
|
この送信に対してのみ TCP ナグリング アルゴリズムを有効にします。
Windows Server 2003 SP1 と Windows XP SP2: このフラグはサポートされていません。 |
|
範囲要求に対して完全な応答コンテンツが渡され、呼び出し元が HTTP API で範囲を適切に処理することを指定します。
メモ このフラグは、HTTP GET 要求への応答でのみサポートされ、機能の限られたサブセットを提供します。 完全な範囲の処理を必要とするアプリケーションは、ユーザー モードで実行し、HTTP.sys に依存しないようにする必要があります。 その使用は推奨されません。
メモ このフラグはサポートされています。 |
|
要求/応答が HTTP に準拠していないため、後続のすべてのバイトをエンティティ本文として扱う必要があることを指定します。 アプリケーションは、Web ソケットのアップグレード要求を受け入れ、接続データを不透明なデータとして扱うように HTTP.sys に通知するときに、このフラグを指定します。
このフラグは、pHttpResponse の StatusCode メンバーが 101 でプロトコルを切り替える場合にのみ許可されます。 HttpSendHttpResponse は、このフラグが使用されている場合、他のすべての HTTP 応答の種類に対して ERROR_INVALID_PARAMETER を返します。 Windows 8 以降: このフラグはサポートされています。 |
[in] HttpResponse
HTTP 応答を定義する HTTP_RESPONSE 構造体へのポインター。
[in, optional] CachePolicy
応答のキャッシュに使用 されるHTTP_CACHE_POLICY 構造体へのポインター。
Windows Server 2003 SP1 と Windows XP SP2: このパラメーターは予約されており、 NULL である必要があります。
[out] BytesSent
省略可能。 関数が同期的に動作する場合に送信される数 (バイト単位) を受け取る変数へのポインター。
pOverlapped を使用して非同期呼び出しを行う場合は、pBytesSent を NULL に設定します。 それ以外の場合、 pOverlapped が NULL に設定されている場合、 pBytesSent には有効なメモリ アドレスを含める必要があり、 NULL に設定することはできません。
[in] Reserved1
このパラメーターは予約されており、 NULL である必要があります。
[in] Reserved2
このパラメーターは予約されており、0 である必要があります。
[in] Overlapped
非同期呼び出しの場合は、 pOverlapped を OVERLAPPED 構造体をポイントするように設定します。同期呼び出しの場合は、 を NULL に設定します。
同期呼び出しは 、pHttpResponse パラメーターで指定されたすべての応答データが送信されるまでブロックしますが、非同期呼び出しは直ちに ERROR_IO_PENDING を返し、呼び出し元アプリケーションは GetOverlappedResult または I/O 完了ポートを使用して操作がいつ完了するかを判断します。 同期に OVERLAPPED 構造体を使用する方法の詳細については、「 同期」と「重複した入力と出力」を参照してください。
[in, optional] LogData
応答のログ記録に使用 されるHTTP_LOG_DATA 構造体へのポインター。 HTTP_LOG_FIELDS_DATA構造体へのポインターを渡し、それを PHTTP_LOG_DATA にキャストします。
URL グループまたはサーバー セッションでログ記録が有効になっている場合でも、アプリケーションがログ フィールドのデータ構造を提供しない限り、応答はログに記録されないことに注意してください。
Windows Server 2003 および Windows XP SP2: このパラメーターは予約されており、 NULL である必要があります。
Windows Vista および Windows Server 2008: このパラメーターは、Windows Vista および Windows Server 2008 の新機能です
戻り値
関数が成功した場合、関数は NO_ERRORを返します。
関数が非同期的に使用される場合、戻り値 ERROR_IO_PENDING は、次の要求がまだ準備ができておらず、通常の重複した I/O 完了メカニズムを使用して後で取得されることを示します。
関数が失敗した場合は、次のいずれかのエラー コードが返されます。
値 | 説明 |
---|---|
|
指定されたパラメーターの 1 つ以上が使用できない形式です。 |
|
WinError.h で定義されている システム エラー コード 。 |
解説
HttpSendHttpResponse 関数は応答ヘッダーの作成と送信に使用され、HttpSendResponseEntityBody 関数を使用して、必要に応じてエンティティ本文データを送信できます。
応答にコンテンツ長ヘッダーも転送エンコード ヘッダーも含まれていない場合、アプリケーションは 、HTTP_SEND_RESPONSE_DISCONNECT フラグを使用して接続を明示的に閉じることで、応答の終了を示す必要があります。
アプリケーションが応答で HttpHeaderServer 識別子を使用して、 HTTP_KNOWN_HEADER 構造体で "Server:" ヘッダーを指定した場合、指定した値はヘッダーの最初の部分として配置され、その後にスペースが続き、"Microsoft-HTTPAPI/1.0" が続きます。 サーバー ヘッダーが指定されていない場合、 HttpSendHttpResponse はサーバー ヘッダーとして "Microsoft-HTTPAPI/1.0" を提供します。
要件
サポートされている最小のクライアント | Windows Vista、SP2 を使用した Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | http.h |
Library | Httpapi.lib |
[DLL] | Httpapi.dll |