关于 WinHTTP

注意

对于自 Windows 10 版本 1709 HTTP/2 (起的应用容器和系统服务,请参阅 RFC7540) 默认处于打开状态。

Microsoft Windows HTTP Services (WinHTTP) 提供服务器支持的 HTTP/2 和 1.1 Internet 协议的高级接口。 WinHTTP 主要用于与 HTTP 服务器通信的服务器应用程序在基于服务器的方案中。

WinINet 设计为交互式桌面应用程序的 HTTP 客户端平台。 WinINet 显示一些操作的用户界面,例如收集用户凭据。 但是,WinHTTP 以编程方式处理这些操作。 需要 HTTP 客户端服务的服务器应用程序应使用 WinHTTP 而不是 WinINet。 有关详细信息,请参阅 将 WinINet 应用程序移植到 WinHTTP

WinHTTP 还设计用于系统服务和基于 HTTP 的客户端应用程序。 但是,需要 FTP 协议功能、Cookie 持久性、缓存、自动凭据对话框处理、Internet Explorer 兼容性或下层平台支持的单用户应用程序应考虑使用 WinINet

可以使用 WinHTTP 应用程序编程接口 (API) 或 IWinHttpRequest 和IWinHttpRequestEvents 接口从 C/C++ 访问此接口。 还可以通过 WinHTTP 对象从脚本和 Microsoft Visual Basic 访问 WinHTTP。 有关各个函数的详细信息和说明,请参阅特定语言的 WinHTTP 函数参考。

从Windows 8开始,WinHTTP 提供 API 以使用 WebSocket 协议l 启用连接,例如 WinHttpWebSocketSendWinHttpWebSocketReceive

注意

WinHTTP 不是可重入的,除非在异步完成回调期间。 也就是说,当线程对 WinHTTP 函数之一(如 WinHttpSendRequest、WinHttpReceiveResponse、WinHttpQueryDataAvailable、WinHttpSendData 或 WinHttpWriteData)的调用处于挂起状态时,它不得第二次调用 WinHTTP,直到第一次调用完成。 发生第二次调用的一种方案如下:如果应用程序将异步过程调用 (APC) 到调用 WinHTTP 的线程排队,并且 WinHTTP 在内部执行可警报等待,则 APC 可以运行。 如果 APC 例程也碰巧调用 WinHTTP,它将重新进入 WinHTTP API,并且 WinHTTP 的内部状态可能已损坏。

WinHTTP 5.1 功能

WinHTTP 版本 5.1 中添加了以下功能:

  • IPv6 支持。
  • AutoProxy 功能。
  • HTTP/1.0 协议,包括对保持连接 (持久性) 连接和会话 Cookie 的支持。
  • HTTP/1.1 分块传输支持 HTTP 响应。
  • 跨会话的匿名连接保持活动池。
  • 安全套接字层 (SSL) 功能,包括客户端证书。 支持的 SSL 协议包括:SSL 2.0、SSL 3.0 和传输层安全性 (TLS) 1.0。
  • 支持服务器和代理身份验证,包括对 Microsoft Passport 1.4 和 Negotiate/ Kerberos 包的集成支持。
  • 除非取消,否则自动处理重定向。
  • 除 API 外,可编写脚本的接口。
  • 用于帮助解决问题的跟踪实用工具。

WinHTTP 不支持许多 WinINet 功能,包括 URL 缓存和持久性 Cookie、自动proxy、自动dialing、脱机支持和文件传输协议 (FTP) 。

有关版本 5.1 中引入的更改的详细信息,请参阅 WinHTTP 5.1 中的新增功能

使用 WinHTTP 入门

有关 WinHTTP 的详细信息,请参阅以下主题。