Ответы:
Вот сравнение производительности этих двух. HTTP более отзывчив к запросам-ответам для небольших файлов, но FTP может быть лучше для больших файлов при правильной настройке. Обычно FTP считался более быстрым. FTP требует, чтобы канал управления и состояние поддерживалось помимо состояния TCP, а HTTP - нет. Перед передачей данных по FTP выполняется 6 пакетов, а в HTTP - только 4.
Я думаю, что правильно настроенный TCP-уровень больше повлияет на скорость, чем разница между протоколами прикладного уровня. В Sun Blueprint Understanding Tuning TCP есть подробности.
Вот еще одно хорошее сравнение индивидуальных характеристик каждого протокола.
Я только что протестировал передачу файлов по FTP и HTTP:
Результат:
fdm
): 1 минутаИтак, в "реальной жизни":
1) HTTP быстрее FTP при загрузке одного большого файла.
2) HTTP может использовать параллельную загрузку фрагментов, что делает его в 6 раз быстрее, чем FTP, в зависимости от условий сети.
Многие брандмауэры отбрасывают исходящие соединения, которые не относятся к портам 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 - это везде ™)
Одно из соображений заключается в том, что FTP может использовать нестандартные порты, что может затруднить прохождение через брандмауэры (особенно если вы используете SSL). HTTP обычно находится на известном порте, поэтому проблема возникает редко.
Если вы все же решите использовать FTP, обязательно прочтите об Активном и Пассивном FTP .
С точки зрения производительности, в конце концов, они оба выбрасывают файлы напрямую через TCP-соединения, поэтому должно быть примерно одинаково.