Delphi:TIdHTTP 与 TNetHTTPClient

Delphi: TIdHTTP vs TNetHTTPClient

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

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

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

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

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

Indy 根本不使用 WinInet/WinHTTP。它直接使用基于跨平台 BSD/POSIX 的套接字 API(如 Windows 上的 WinSock),完全从头开始实现互联网协议(如 HTTP)。

TIdHTTP 是手动 HTTP 实现。

另一方面,

TNetHTTPClient 包装系统提供的 HTTP API(如 Windows 上的 WinInet/WinHTTP)。

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