Wiele zapór ogniowych przerywa połączenia wychodzące, które nie są kierowane do portów 80 lub 443 (http & https); niektórzy nawet porzucają połączenia do tych portów, które nie są HTTP (S). FTP może być dozwolone lub nie, nie mówiąc o trybach aktywnych / PASV.
Ponadto protokół HTTP / 1.1 umożliwia znacznie lepsze żądania częściowe („wysyłaj tylko z bajtu 123456 do końca pliku”), żądania warunkowe i buforowanie („wysyłaj tylko w przypadku zmiany treści / zmiany daty ostatniej modyfikacji”) oraz kompresję treści (gzip).
Protokół HTTP jest znacznie łatwiejszy w użyciu za pośrednictwem serwera proxy.
Z moich anegdot wynika, że HTTP jest łatwiejsze do pracy z porzuconymi / wolnymi / niestabilnymi połączeniami; np. nie jest konieczne (ponowne) ustanawianie sesji logowania przed (ponownym) zainicjowaniem transferu.
OTOH, HTTP jest bezstanowe, więc trzeba by było przeprowadzić uwierzytelnianie i zbudować ścieżkę „kto co robił kiedy”.
Jedyną różnicą w szybkości, jaką zauważyłem, jest przesyłanie wielu małych plików: HTTP z potokowaniem jest szybsze (zmniejsza liczbę obiegów, szczególnie zauważalne w sieciach o dużym opóźnieniu).
Zwróć uwagę, że HTTP / 2 oferuje jeszcze więcej optymalizacji, podczas gdy protokół FTP nie widział żadnych aktualizacji od dziesięcioleci (a nawet rozszerzenia FTP są nieznacznie przyjmowane przez użytkowników). Tak więc, chyba że przesyłasz pliki przez maszynę czasu, wygrywa HTTP.
(Stycznie: istnieją protokoły, które lepiej nadają się do przesyłania plików, takie jak rsync
lub BitTorrent, ale te nie wymagają tak dużej wymiany myśli, podczas gdy HTTP jest Everywhere ™)