HttpSendResponseEntityBody 関数 (http.h)

HttpSendResponseEntityBody 関数は、HTTP 応答に関連付けられたエンティティ本文データを送信します。

構文

HTTPAPI_LINKAGE ULONG HttpSendResponseEntityBody(
  [in]           HANDLE           RequestQueueHandle,
  [in]           HTTP_REQUEST_ID  RequestId,
  [in]           ULONG            Flags,
  [in]           USHORT           EntityChunkCount,
  [in]           PHTTP_DATA_CHUNK EntityChunks,
  [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_SEND_RESPONSE_FLAG_DISCONNECT
この応答を送信した後、ネットワーク接続を切断し、使用中の HTTP のバージョンに関連付けられている永続的な接続機能をオーバーライドする必要があります。 アプリケーションでは、コンテンツ長もチャンク エンコードも使用されていない場合に、このフラグを使用してエンティティの末尾を示す必要があります。
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
この応答の追加のエンティティ本文データは、 HttpSendResponseEntityBody への 1 つ以上の後続の呼び出しを通じてアプリケーションによって送信されます。 最後の呼び出しでは、このフラグを 0 に設定します。
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
このフラグを使用すると、応答ごとにカーネル内のデータをバッファリングできます。

同期 I/O を実行しているアプリケーション、または非同期 I/O を実行しているアプリケーションで、一度に未処理の送信を 1 つ以下で使用する必要があります。

非同期 I/O を使用するアプリケーションでは、一度に複数の送信が未処理である可能性があります。このフラグは使用しないでください。

このフラグを設定するときは、 HttpSendHttpResponse 関数の呼び出しでも一貫して使用する必要があります。

Windows Server 2003: このフラグはサポートされていません。 このフラグは、WINDOWS Server 2003 SP1 の新しいフラグです。

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
この送信に対してのみ TCP ナグリング アルゴリズムを有効にします。

Windows Vista 以降: このフラグはサポートされていません。

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
範囲要求に対して、完全な応答コンテンツが渡され、呼び出し元が HTTP API で範囲を適切に処理することを要求することを指定します。
メモ このフラグは、HTTP GET 要求への応答でのみサポートされ、機能の限られたサブセットを提供します。 完全な範囲の処理を必要とするアプリケーションは、ユーザー モードで実行し、HTTP.sys に依存しないようにする必要があります。 使用は推奨されません。
 
Windows Server 2008 R2 および Windows 7 以降。

メモ このフラグはサポートされています。

HTTP_SEND_RESPONSE_FLAG_OPAQUE
要求/応答が HTTP に準拠していないため、後続のすべてのバイトをエンティティ本文として扱う必要があることを指定します。 アプリケーションは、Web ソケットのアップグレード要求を受け入れ、接続データを不透明なデータとして扱うように HTTP.sys に通知するときに、このフラグを指定します。

このフラグは、pHttpResponseStatusCode メンバーが 101 でプロトコルを切り替える場合にのみ許可されます。 HttpSendResponseEntityBody は 、このフラグが使用されている場合、他のすべての HTTP 応答型の ERROR_INVALID_PARAMETER を返します。

Windows 8 以降: このフラグはサポートされています。

 
注意HttpSendHttpResponse 関数の 1 回の呼び出しで両方のフラグを組み合わせると、未定義の結果が生成されます。
 

[in] EntityChunkCount

pEntityChunks が指す配列内の構造体の数。 この数は 9999 を超えることはできません。

[in] EntityChunks

エンティティ本文データとして送信 されるHTTP_DATA_CHUNK 構造体の配列へのポインター。

[out] BytesSent

省略可能。 関数が同期的に動作する場合に送信される数値をバイト単位で受け取る変数へのポインター。

pOverlapped を使用して非同期呼び出しを行う場合は、pBytesSent を NULL に設定します。 それ以外の場合、 pOverlappedNULL に設定されている場合、 pBytesSent には有効なメモリ アドレスを含める必要があり、 NULL に設定することはできません。

[in] Reserved1

このパラメーターは予約済みであり、 NULL である必要があります。

[in] Reserved2

このパラメーターは予約されており、0 である必要があります。

[in] Overlapped

非同期呼び出しの場合は、 pOverlappedOVERLAPPED 構造体を指すように設定します。同期呼び出しの場合は、NULL に設定 します

同期呼び出しは 、pEntityChunks パラメーターで指定されたすべての応答データが送信されるまでブロックしますが、非同期呼び出しは直ちに 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 完了メカニズムを使用して後で取得されます。

関数が失敗した場合、戻り値は次のいずれかのエラー コードになります。

意味
ERROR_INVALID_PARAMETER
指定されたパラメーターの 1 つ以上が使用できない形式です。
ERROR_BAD_COMMAND
同じ RequestId を持つ HttpSendHttpResponse または HttpSendResponseEntityBody に対して保留中の呼び出しがあります。
その他
WinError.h で定義されている システム エラー コード

注釈

Content-length ヘッダーも Transfer-encoding ヘッダーも応答ヘッダーに含まれていない場合、アプリケーションは 、HTTP_SEND_RESPONSE_DISCONNECT フラグを使用して接続を明示的に閉じることで、応答の終了を示す必要があります。

メモHttpSendResponseEntityBody (または HttpSendHttpResponse) と HttpSendResponseEntityBody は、同じ RequestId 上の異なるスレッドから同時に呼び出してはなりません。
 

要件

要件
サポートされている最小のクライアント Windows Vista、WINDOWS XP と SP2 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー http.h
Library Httpapi.lib
[DLL] Httpapi.dll

こちらもご覧ください

HTTP Server API バージョン 1.0 関数

HTTP_DATA_CHUNK

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendHttpResponse