Delphi: TIdHTTP против TNetHTTPClient
Я пишу менеджер загрузок в Delphi с некоторыми пользовательскими функциями, такими как возобновляемая загрузка и загрузка через прокси.
Я изучаю различные компонентные решения: Indy и NetHTTP, оба кажутся очень близкими.
TNetHTTPClient
кажется интерфейсомwinhttp.dll
,TIdHTTP
кажется интерфейсомwininet.dll
(но я не уверен).TIdHTTP
кажется очень старым компонентом (может быть, очень стабильным / протестированным) и имеет массу документации в Интернете.TNetHTTPClient
кажется, очень недавний компонент, и не имеет хорошей документации в Интернете.
Я немного не решил... какой выбрать?
Дело в том, в чем главное отличие этих двух компонентов?
Мой вопрос немного спорный (прежде всего основанный на мнении), но я не нашел практического сравнения между этими двумя компонентами.
2 ответа
Indy НЕ использует WinInet/WinHTTP вообще. Он напрямую использует кроссплатформенные API сокетов на основе BSD/POSIX (например, WinSock в Windows), полностью реализуя интернет-протоколы (например, HTTP).
TIdHTTP
является ручной реализацией HTTP.
TNetHTTPClient
с другой стороны, вместо этого оборачивает предоставляемые системой HTTP API (например, WinInet/WinHTTP в Windows).
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 от разработчика к операционной системе.