关于 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 启用连接,例如 WinHttpWebSocketSend 和 WinHttpWebSocketReceive。
注意
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 的详细信息,请参阅以下主题。
- WinINet 与 WinHTTP 比较了用于访问 HTTP 的两种技术。
- WinHTTP 版本 描述了 WinHTTP 的版本历史记录。
- WinHTTP 5.1 中的新增 功能介绍了 WinHTTP 5.1 中的更改和新功能。
- 网络术语 描述了与网络相关的有用概念和术语,尤其是与 HTTP 协议相关的术语。
- 选择 WinHTTP 接口介绍了适用于 WinHTTP 的 C/C++ API 和 COM 接口。
- WinHTTP 安全注意事项 描述了使用 WinHTTP 时要注意的安全问题。
- 将 WinINet 应用程序移植到 WinHTTP 介绍了如何修改现有 WinINet 应用程序以使用 WinHTTP API。