Многие брандмауэры сбрасывают исходящие соединения, которые не подключены к портам 80 или 443 (http & https); некоторые даже сбрасывают соединения с теми портами, которые не являются HTTP (S). FTP может или не может быть разрешено, не говоря уже об активных / PASV режимах.
Кроме того, HTTP / 1.1 допускает гораздо лучшие частичные запросы («только отправка из байта 123456 в конец файла»), условные запросы и кэширование («только отправка, если содержимое изменилось / если дата последнего изменения изменилась») и сжатие контента (gzip).
HTTP гораздо проще использовать через прокси.
Исходя из моего анекдотического свидетельства, HTTP легче заставить работать с пропущенными / медленными / нестабильными соединениями; например нет необходимости (пере) устанавливать сеанс входа в систему до (пере) инициирования передачи.
OTOH, HTTP не имеет состояния, поэтому вам придется выполнять аутентификацию и составлять список «кто что сделал когда» сам.
Единственное различие в скорости, которое я заметил, - это передача большого количества маленьких файлов: HTTP с конвейерной передачей работает быстрее (сокращает количество обращений, особенно в сетях с высокой задержкой).
Обратите внимание, что HTTP / 2 предлагает еще больше оптимизаций, в то время как протокол FTP не видел обновлений в течение десятилетий (и даже расширения FTP имеют незначительное восприятие пользователями). Так что, если вы не передаете файлы через машину времени, похоже, HTTP победил.
(Тангенциально: существуют протоколы, которые лучше подходят для передачи файлов, такие как rsync
или BitTorrent, но у них не так много общего, в то время как HTTP - это Everywhere ™)