我正在Delphi中编写一个下载管理器,其中包含一些自定义功能,如可恢复下载和通过代理下载。
我正在研究不同的组件解决方案:Indy和NetHTTP,两者看起来非常接近。
TNetHTTPClient
似乎是winhttp.dll
的界面。
TIdHTTP
似乎是wininet.dll
的界面(但我不确定)。
TIdHTTP
似乎是一个非常古老的组件(可能非常稳定/经过测试),并且在线提供大量文档。
TNetHTTPClient
似乎是一个非常新的组件,并且没有在线提供良好的文档。
我有点犹豫不决......选择哪一个?
重点是:这两个组件之间的主要区别是什么?
我的问题有点争议(主要是基于意见的),但我还没有找到这两个组成部分之间的任何实际比较。
答案 0 :(得分:4)
Indy根本不使用WinInet / WinHTTP。它直接使用基于BSD / POSIX的跨平台套接字API(如Windows上的WinSock),从头开始实现Internet协议(如HTTP)。
TIdHTTP
是一个手动HTTP实现。
TNetHTTPClient
包装系统提供的HTTP API(如Windows上的WinInet / WinHTTP)。
答案 1 :(得分:2)
TNetHTTPClient
是在Delphi XE8中引入的。
TNetHTTPClient
的最重要的好处是它允许您的应用程序支持HTTPS,而不必提供自己的SSL / TLS支持。 TNetHTTPClient
依赖于操作系统提供的SSL / TLS支持。
这意味着一旦发现新漏洞,您就不必更新应用程序。您的客户将获得这些更新,作为其操作系统更新的一部分。为您减少工作量,为客户提供更好的安全性(如果他们相信自己的操作系统供应商比您更擅长更新SSL / TLS库)。
这也意味着用于加密和解密HTTPS流量的代码不在您的应用程序中。因此,您的应用程序不受导入或导出加密算法的限制的影响。
TIdHTTP
依靠OpenSSL支持HTTPS。您必须随应用程序一起提供两个DLL。 OpenSSL是一个开源项目。一些组织对包含开源组件的软件存在问题。我们的产品之一使用TIdFTP
和OpenSSL支持FTPS。时不时地,我们有用户询问该产品在没有这些DLL的情况下是否可以运行(它可以,但没有FTPS),因为他们的存在使他们难以批准该软件在其组织中使用。
我相信,这也是Embarcadero创建TNetHTTPClient
的动机(即使他们已经拥有TIdHTTP
)。它将确保HTTPS安全从开发人员转移到操作系统的责任。