Windows Internet

Windows上有两个HTTP协议栈,一个是WinINet,另一个是WinHTTP。前者主要用于客户端,或者主要用于服务端。

WinINet vs. WinHTTP

WinINet支持的功能

  • 可以保存用户凭证,并提供相应的UI可以让用户输入凭证
  • 支持FTP,IE的Security Zones,Protected Mode。
  • 支持Cookie Jar APIs
  • SOCKS v4
  • File scheme support,方便代理脚本使用File scheme 来指定路径
  • InternetOpenUrl,方便打开一个URL

WinHTTP支持的功能

  • 分块上传(Chunked Upload)
  • Services Support,可以在服务中使用
  • Session Isolation,可以隔离会话
  • Impersonation,可以仿冒用户进行操作

两者都支持的功能:

  • IDNA RFC/Punycode

两者都不支持的内容

  • Bidirectional Send and Receive
  • Overlapped I/O

Windows HTTP Services

虽然WinHTTP主要是服务端使用的,但是也可以用于客户端,比如.NET的WinHttpHandler API就基于WinHTTP。WinHTTP不仅支持C/C++接口,还支持COM接口:

  • IWinHttpRequest 和 IWinHttpRequestEvents
  • WinHttpWebSocketSend 和 WinHttpWebSocketReceive.

About WinHTTP

从WIn10 1709开始,WinHTTP默认开启HTTP/2 (see RFC7540) 。

WinHTTP是不可重入的。运行WinHttpSendRequest、WinHttpReceiveResponse、WinHttpQueryDataAvailable、WinHttpSendData或者WinHttpWriteData之类的函数时,不可以二次操作。

WinHTTP不支持WinINet具有的这些特性:URL caching and persistent cookies, autoproxy, autodialing, offline support, and File Transfer Protocol (FTP)

Porting WinINet Applications to WinHTTP讲述如何将WinINet程序迁移到WinHTTP上。

其他参考

(本篇完)