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 от разработчика к операционной системе.

Другие вопросы по тегам