德尔福:TIdHTTP与TNetHTTPClient

时间:2017-04-01 07:10:23

标签: delphi indy dotnet-httpclient idhttp

我正在Delphi中编写一个下载管理器,其中包含一些自定义功能,如可恢复下载和通过代理下载。

我正在研究不同的组件解决方案:Indy和NetHTTP,两者看起来非常接近。

  • TNetHTTPClient似乎是winhttp.dll的界面。

  • TIdHTTP似乎是wininet.dll的界面(但我不确定)。

  • TIdHTTP似乎是一个非常古老的组件(可能非常稳定/经过测试),并且在线提供大量文档。

  • TNetHTTPClient似乎是一个非常新的组件,并且没有在线提供良好的文档。

我有点犹豫不决......选择哪一个?

重点是:这两个组件之间的主要区别是什么?

我的问题有点争议(主要是基于意见的),但我还没有找到这两个组成部分之间的任何实际比较。

2 个答案:

答案 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安全从开发人员转移到操作系统的责任。

相关问题