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

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

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

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

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

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

Многие брандмауэры отбрасывают исходящие соединения, которые не относятся к портам 80 или 443 (http и https); некоторые даже отбрасывают соединения с теми портами, которые не являются HTTP (S). FTP может или не может быть разрешен, а не говорить о режимах active / PASV.

Кроме того, HTTP / 1.1 разрешает намного лучшие частичные запросы («только отправлять с байта 123456 в конец файла»), условные запросы и кеширование («только отправлять, если контент изменен / если последний изменен-дата изменен») и сжатие содержимого (GZIP).

HTTP гораздо проще использовать через прокси.

Из моих анекдотических доказательств HTTP легче выполнять работу с отброшенными / медленными / шелушащимися соединениями; например, не требуется (повторно) устанавливать сеанс входа в систему до (повторного) начала передачи.

OTOH, HTTP не имеет апатрида, поэтому вам нужно будет сделать аутентификацию и построить след «кто сделал то, что», когда вы сами.

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

Обратите внимание, что HTTP / 2 предлагает еще больше оптимизаций, тогда как протокол FTP не видел каких-либо обновлений в течение десятилетий (и даже расширения FTP имеют незначительное поглощение пользователями). Таким образом, если вы не передаете файлы через машину времени, HTTP, похоже, выиграл.

(Тангенциально: существуют протоколы, которые лучше подходят для передачи файлов, такие как rsync или BitTorrent, но у них не так много разума, тогда как HTTP – это Everywhere ™)

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

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

Результат:

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

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

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

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

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

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

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

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

  • Как я могу обслуживать https и http для Jetty из одного порта?
  • Как узнать, поддерживает ли сервер заголовок Range?
  • Какие методы HTTP соответствуют методам CRUD?
  • Как должен выглядеть HTTP-запрос Multipart с несколькими файлами?
  • Как получить URL-адрес с веб-сайта с помощью Java?
  • Что означает HTTP / 1.1 302?
  • В чем разница между POST и PUT HTTP REQUEST?
  • Android: UnknownHostException
  • Как веб-браузер всегда отправляет конечную косую черту после имени домена?
  • Создавать HTTP-запрос и получать ответ с помощью приложения консоли C #
  • Код ответа HTTP для POST, когда ресурс уже существует
  • Interesting Posts

    Google Chrome не удаляет историю просмотров

    Не удается завершить процесс Windows 7, даже попробовал pskill

    Android: Разрешение отказа: начало намерения с отмененным разрешением android.permission.CAMERA

    В чем разница между VBA 6.0 и VBA 7.0?

    У палки RAM есть несколько плохих блоков. Есть ли способ отключить их или выделить плохие блоки, чтобы другие программы не могли их использовать?

    Прокрутите флажки и подсчитайте каждую отмеченную или непроверенную

    Как изменить размер диска VirtualBox?

    Ограничение размера текстуры? Android Open GL ES 2.0

    Как выполнить цикл for для каждого символа в строке в Bash?

    Google Chrome продолжает разбивать вкладки

    Можно ли запретить удаление файлов, но разрешить их создание для определенного каталога в Linux?

    Специальные переменные в ggplot (..count .., ..density .. и т.д.)

    GIMP 2.6.11 на Windows 7 64-битный не может открывать файлы PNG

    Преобразовать столбец в список, разделенный запятыми

    Невозможно загрузиться с диска, вставьте системный диск и нажмите ввод

    Давайте будем гением компьютера.