Delphi:TIdHTTP 与 TNetHTTPClient
Delphi: TIdHTTP vs TNetHTTPClient
我正在 Delphi 中编写一个下载管理器,其中包含一些自定义功能,例如可恢复下载和通过代理下载。
我正在研究不同的组件解决方案:Indy 和 NetHTTP,两者看起来非常接近。
TNetHTTPClient
好像是winhttp.dll
的接口。
TIdHTTP
似乎是 wininet.dll
的接口(但我不确定)。
TIdHTTP
似乎是一个非常古老的组件(可能非常 stable/tested)并且有大量在线文档。
TNetHTTPClient
似乎是一个非常新的组件,并且没有很好的在线文档。
我有点犹豫不决...选择哪一个?
重点是:这两个组件之间的主要区别是什么?
我的问题有点争议(主要是基于意见),但我还没有找到这两个组件之间的任何实际比较。
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 安全的责任从开发人员转移到操作系统。
我正在 Delphi 中编写一个下载管理器,其中包含一些自定义功能,例如可恢复下载和通过代理下载。
我正在研究不同的组件解决方案:Indy 和 NetHTTP,两者看起来非常接近。
TNetHTTPClient
好像是winhttp.dll
的接口。TIdHTTP
似乎是wininet.dll
的接口(但我不确定)。TIdHTTP
似乎是一个非常古老的组件(可能非常 stable/tested)并且有大量在线文档。TNetHTTPClient
似乎是一个非常新的组件,并且没有很好的在线文档。
我有点犹豫不决...选择哪一个?
重点是:这两个组件之间的主要区别是什么?
我的问题有点争议(主要是基于意见),但我还没有找到这两个组件之间的任何实际比较。
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 安全的责任从开发人员转移到操作系统。