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上。
其他参考
(本篇完)