httpDeclarePush 函数 (http.h)

声明要用于 HTTP 服务器推送的资源到子资源关系。 如果基础协议、连接、客户端和策略允许推送操作,则 HTTP.sys 对给定资源执行 HTTP 2.0 服务器推送。

语法

HTTPAPI_LINKAGE ULONG HttpDeclarePush(
  [in]           HANDLE                RequestQueueHandle,
  [in]           HTTP_REQUEST_ID       RequestId,
  [in]           HTTP_VERB             Verb,
  [in]           PCWSTR                Path,
  [in, optional] PCSTR                 Query,
  [in, optional] PHTTP_REQUEST_HEADERS Headers
);

参数

[in] RequestQueueHandle

HttpCreateRequestQueue 函数返回的 HTTP.sys 请求队列的句柄。

[in] RequestId

声明推送操作的请求的不透明标识符。 请求必须来自指定的队列句柄。

[in] Verb

用于推送操作的 HTTP 谓词。 HTTP.sys 推送操作仅支持 HttpVerbGETHttpVerbHEAD

[in] Path

要推送的资源的 URL 的路径部分。

[in, optional] Query

要推送的资源的 URL 的查询部分。 此字符串不应包含前导问号 (?) 。

[in, optional] Headers

推送操作的请求标头。

不应提供主机标头,因为 HTTP.sys 自动生成正确的主机信息。 HTTP.sys 不支持跨域推送操作,因此 HTTP.sys 强制并生成与原始客户端发起的请求匹配的主机信息。

不允许推送请求具有实体正文,因此不能包含非零 Content-Length 标头或任何 Transfer-Encoding 标头。

返回值

如果函数成功,则返回 NO_ERROR

如果函数失败,它将返回 WinError.h 中定义的 系统错误代码

注解

在发送任何会导致客户端发现子资源本身的响应字节之前,应调用 HttpDeclarePush 。 未能遵守此顺序会导致推送资源的服务器与检索资源的客户端之间发生争用,从而浪费带宽。 服务器应用程序应仅使用 HttpDeclarePush 来推送服务器应用程序需要且客户端尚未缓存的资源。 如果服务器应用程序推送其他资源,则可能不必要地使用带宽和 CPU。

要求

要求
最低受支持的客户端 Windows 10 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
目标平台 Windows
标头 http.h
Library Httpapi.lib
DLL Httpapi.dll

另请参阅

HTTP_REQUEST_HEADERS

HTTP_VERB

HttpCreateRequestQueue