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 函数返回其句柄。
带 SP1 的 Windows Server 2003 和 SP2 的 Windows XP: 请求队列的句柄由 HttpCreateHttpHandle 函数创建。
[in] RequestId
此响应所对应的 HTTP 请求的标识符。 通过调用 HttpReceiveHttpRequest 函数,在 HTTP_REQUEST 结构的 RequestId 成员中返回此值。 无法 HTTP_NULL_ID。
[in] Flags
一个参数,可包含以下互斥标志值之一。
Flags | 含义 |
---|---|
|
发送此响应后,网络连接应断开连接,并重写与正在使用的 HTTP 版本关联的任何持久连接功能。 在不使用内容长度和分块编码的情况下,应用程序应使用此标志来指示实体的末尾。 |
|
应用程序通过一个或多个后续调用 HttpSendResponseEntityBody 发送此响应的其他实体正文数据。 最后一次调用会将此标志设置为零。 |
|
此标志允许基于每个响应对内核中的数据进行缓冲。
它应由执行同步 I/O 的应用程序使用,或者由执行异步 I/O 且一次未完成的发送不超过一次的应用程序使用。 使用异步 I/O(一次可能有多个未完成发送)的应用程序不应使用此标志。 设置此标志后,还应在调用 HttpSendHttpResponse 函数时一致使用该标志。 Windows Server 2003: 不支持此标志。 此标志是 SP1 的 Windows Server 2003 的新增标志。 |
|
仅为此发送启用 TCP 导航算法。
Windows Vista 及更高版本: 不支持此标志。 |
|
指定对于范围请求,传递完整的响应内容,并且调用方希望 HTTP API 正确处理范围。
注意 此标志仅支持对 HTTP GET 请求的响应,并提供有限的功能子集。 需要全范围处理的应用程序应在用户模式下执行,而不是依赖于 HTTP.sys。 不建议使用它。
注意 支持此标志。 |
|
指定请求/响应不符合 HTTP 要求,所有后续字节都应视为实体正文。 应用程序在接受 Web 套接字升级请求并通知 HTTP.sys 将连接数据视为不透明数据时指定此标志。
仅当 pHttpResponse 的 StatusCode 成员为 101 交换协议时,才允许使用此标志。 如果使用此标志,HttpSendResponseEntityBody 将返回所有其他 HTTP 响应类型的ERROR_INVALID_PARAMETER。 Windows 8及更高版本:支持此标志。 |
[in] EntityChunkCount
pEntityChunks 指向的数组中的许多结构。 此计数不能超过 9999。
[in] EntityChunks
指向要作为实体主体数据发送的 HTTP_DATA_CHUNK 结构的数组的指针。
[out] BytesSent
可选。 指向变量的指针,该变量接收在函数同步运行时发送的数字(以字节为单位)。
使用 pOverlapped 进行异步调用时,请将 pBytesSent 设置为 NULL。 否则,当 pOverlapped 设置为 NULL 时, pBytesSent 必须包含有效的内存地址,并且不能设置为 NULL。
[in] Reserved1
此参数是保留的,必须为 NULL。
[in] Reserved2
此参数是保留的,必须为零。
[in] Overlapped
对于异步调用,将 pOverlapped 设置为指向 OVERLAPPED 结构;对于同步调用,请将其设置为 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 和 SP2 的 Windows XP: 此参数是保留的,必须为 NULL。
Windows Vista 和 Windows Server 2008: 此参数是 Windows Vista 和 Windows Server 2008 的新增功能
返回值
如果函数成功,则返回值 NO_ERROR。
如果异步使用函数,则返回值 ERROR_IO_PENDING 表示下一个请求尚未就绪,稍后将通过正常的重叠 I/O 完成机制进行检索。
如果函数失败,则返回值为以下错误代码之一。
值 | 含义 |
---|---|
|
提供的一个或多个参数以不可用的形式提供。 |
|
调用 HttpSendHttpResponse 或 HttpSendResponseEntityBody 具有相同 的 RequestId。 |
|
WinError.h 中定义的 系统错误代码 。 |
注解
如果响应标头中不包含 Content-length 标头和传输编码标头,则应用程序必须通过使用 HTTP_SEND_RESPONSE_DISCONNECT 标志显式关闭连接来指示响应的结束。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista、Windows XP 和 SP2 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | http.h |
Library | Httpapi.lib |
DLL | Httpapi.dll |