Сравнение HTTP и FTP для передачи файлов

Каковы преимущества (или ограничения) одного над другим для передачи файлов через Интернет?

(Я знаю об защищенных формах обоих протоколов. Я бы хотел услышать сравнения с помощью личного опыта с точки зрения производительности, надежности, ограничений размера файла и т.д.)

Ответ 1

Здесь сравнение производительности. HTTP более отзывчив для запросов-ответов небольших файлов, но FTP может быть лучше для больших файлов при правильной настройке. Обычно FTP считался быстрее. FTP требует, чтобы канал управления и состояние поддерживались помимо состояния TCP, но HTTP нет. Перед отправкой данных на FTP-серверу отправляется 6 пакетов, но только 4 в HTTP.

Я думаю, что правильно настроенный уровень TCP будет иметь большее влияние на скорость, чем разница между протоколами прикладного уровня. В документе Sun Blueprint Общие сведения о настройке TCP содержатся сведения.

Вот еще одно хорошее сравнение отдельных характеристик каждого протокола.

Ответ 2

Многие брандмауэры удаляют исходящие соединения, которые не относятся к портам 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 ™)

Ответ 3

Я просто сравнивал передачу файлов по FTP и HTTP:

  • над двумя очень хорошими серверными соединениями
  • с использованием того же файла .zip 1GB.
  • в тех же сетевых условиях (проверенных один за другим)

Результат:

  • с использованием FTP: 6 минут
  • с использованием HTTP: 4 минуты
  • с использованием параллельного программного обеспечения для скачивания http (fdm): 1 минута

Итак, в основном в ситуации "реальной жизни":

1) HTTP-загрузка быстрее, чем FTP при загрузке одного большого файла.

2) HTTP может использовать загрузку с параллельным портом, что делает его в 6 раз быстрее, чем FTP, в зависимости от условий сети.

Ответ 4

Одно соображение заключается в том, что FTP может использовать нестандартные порты, что может затруднить получение брандмауэров (особенно если вы используете SSL). HTTP обычно находится на известном порту, поэтому это редко бывает проблемой.

Если вы решите использовать FTP, убедитесь, что вы читаете о Active и Passive FTP.

Что касается производительности, то в конце дня они оба извергают файлы непосредственно по TCP-соединениям, поэтому они должны быть примерно одинаковыми.

Ответ 5

Оба они используют TCP в качестве транспортного протокола, но HTTP использует постоянное соединение, что повышает производительность TCP.