WinINet 与 WinHTTP简介

WinINet 与 WinHTTP简介之前一直有听到WinHTTP和WinINet这两种网络服务,是Microsoft提供的两套API,但一直没有系统的用过,趁次机会一起来将这个整理一下。    首先了解一下WinINet:    WinInet,全称TheMicrosoftWindowsInternet,应用程序可以通过它提供的API访问标准的网络协议,比如FTP和HTTP等。WinINet不支持服务端的

大家好,又见面了,我是你们的朋友全栈君。

       之前一直有听到WinHTTP和WinINet这两种网络服务,是Microsoft提供的两套API,但一直没有系统的用过,趁次机会一起来将这个整理一下。
       首先了解一下WinINet:
       WinInet,全称The Microsoft Windows Internet ,应用程序可以通过它提供的API访问标准的网络协议,比如FTP和HTTP等。WinINet不支持服务端的实现。另外,它也不能在服务端进行调用。WinINet是被设计成一个HTTP客户端平台来为桌面应用提供相应的接口。它为收集用户证书等操作扮演着一个用户接口的角色。
       Microsoft的这篇文档做了一个简要的介绍
Windows Internet

       再来了解一下WinHTTP:
       WinHTTP(全称Microsoft Windows HTTP Services )为开发者提供了服务器的支持及为HTTP/1.1提供了更高层次的接口。WinHTTP的设计优先考虑的是,在服务器应用与HTTP服务器的通信这类基于场景中。
       WinHTTP也可以用于系统服务以及基于HTTP的客户端应用,但是对于那种需要使用到FTP协议,cookie保存,缓存cache,自动证书对话框处理,IE兼容,或者下载平台支持的应用则应该使用WinINet。
       另外,从windows8开始,WinHTTP为WebSocket协议增加了新的接口实现,比如WinHttpWebSocketSend 和 WinHttpWebSocketReceive这类。
       更多的了解可以看官方的这篇文章,
About WinHTTP

       除了一些异常情况外,WinINet是WinHTTP的一个超集。按照Microsoft的说法,在这两者之间做选择的时候最好选择WinINet,除非你是计划运行一个服务器或者是一个能够仿造请求及session隔离的类似于服务器的进程。
       上面列出来的是Microsoft官方提供的相关文档整理出来的资料,下面再列出一些chromium团队整理的一些区别。chromium团队在最初做选择的时候就考虑了这些东西。我们也换个角度,从chromium做浏览器的角度来考虑一下这个问题。插句题外话,chromium没有用WinINet,开始的版本用的是WinHTTP加上一些自己的功能补充,后来的版本直接就切到了它们自己的网络库。具体描述可以看看
Multi-process Resource Loading这篇文章。
       1、都能处理他们计划支持的windows平台(Win2K及后续系统)。

       2、WinHTTP文档更加完善。而WinINet的API较难理解且文档有些混乱。

       3、chromium需要的API接口 WinHTTP有更清晰的描述,而WinInet中chromium需要的一些函数它们却没有文档或者不支持,尽管IE用了它们。

       4、WinHTTP允许自己实现自己的cache,而WinInet经常会与IE分享一个cache。Chromium想要自己控制自己的cache数据,同时,与IE分享cache会引起一些问题,比如说当某些站点有一些为特定浏览器服务的页面。

       5、WinInet在使用账户上已经被IE证明是更好的,WinHTTP使用起来没有这么好,它主要是为服务器设计的。它在处理由服务器发送并保持活动的没有进行ASCII编码的URL时存在问题。chromium不得不为这些问题提供不一样的工作方式。


       这两者的具体区别可以深入的看看看
WinINet vs. WinHTTP这篇文章。
       通过这些了解,当你要用Microsoft提供的API做网络数据请求时,你应该有所了解,知道该用WinINet还是WinHTTP了,如果是要进行从WinINet到WinHTTP的转换则可以看看
Porting WinINet Applications to WinHTTP这篇文章。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157284.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python3:两数之和

    python3:两数之和

    2021年4月16日
    129
  • C语言中int、long int、long long的区别

    C语言中int、long int、long long的区别1、关于int和longint(1)在VC下没有区别。两种类型均用4个字节存放数据。(2)VC是后出的编译器,之前有很多早期的C编译器,在早期编译器下longint占4个字节,int占2个字节。(3)之所以有“整型”和“长整形”两种不同类型,是C语言在诞生时发明者规定好的,前者存储的整数的值域小于后者。 这个问题不用牵肠挂肚,在VC下用谁都可以。

    2022年5月9日
    94
  • windows10开启telnet命令_windows10 telnet

    windows10开启telnet命令_windows10 telnetWindows10操作系统上使用telnet命令大概分为以下两部分:第一部分:配置telnet第二部分:进入黑窗口最后,来一个调试,尝试连接服务器。(正文开始)第一部分:首先,通过控制面板进行配置telnet打开:控制面板——程序——启动或关闭windows功能——勾上telnetclient如图所示:第二部分:键盘按键操作:window+r——输入cmd回车——进入原始黑窗口——输入telnet回车——输入quit退出telnet模式调试部分:网络上的方法:

    2022年9月23日
    2
  • 应用程序无法正常启动0xc000012d_0xc000007b怎么解决

    应用程序无法正常启动0xc000012d_0xc000007b怎么解决【问题背景】用vs2008写了一个MySql(MySQL的版本号:8.0.11.0)的测试程序,在搞定MySQL所需要的x64平台后,问题又来了:编译一切都好,就是在程序启动的时候报了下面这个错!【解决方案】1、网上找了很多资料,大多数都说是direct_x的问题,于是用360软件管家下了个dx9,再次编译运行,问题依旧!2、用depends.exe软件查看了libmysql.dll的依赖…

    2022年9月27日
    2
  • linux安装svn服务器的两种方式

    linux安装svn服务器的两种方式操作环境:CentOS7.264位==============第一种:采用压缩包安装:比如你们公司服务器上安装软件有自己的规定,一般会采用压缩包安装。==============第一步:SVN服务器端压缩包下载下载地址:http://mirrors.cnnic.cn/apache/subversion/ 我下载的是subversion-1.8.19版本,下载好的压缩包置于目录/usr/loc…

    2022年7月19日
    16
  • (20211206更新)ubuntu18.04 安装Python3.8.3、jupyter notebook远程连接配置、虚拟环境搭建。及torch、tensorflow成功下载[通俗易懂]

    (20211206更新)ubuntu18.04 安装Python3.8.3、jupyter notebook远程连接配置、虚拟环境搭建。及torch、tensorflow成功下载[通俗易懂]最近搞了一个低配云服务器,就瞎整。多次踩坑后,进行记录问题之前有试过删除软链接、进行替换#删除软连接sudorm-rf/usr/bin/python3sudorm-rf/usr/bin/pip3#新建软连接sudoln-s/usr/local/python3/bin/python3.8/usr/bin/python3sudoln-s/usr/local/python3/bin/pip3.8/usr/bin/pip3但是吧,后续的pipinstall会出

    2022年6月23日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号