Molti firewall interrompono le connessioni in uscita che non sono alle porte 80 o 443 (http & https); alcuni addirittura rilasciano connessioni a quelle porte che non sono HTTP (S). FTP può o meno essere autorizzato, per non parlare delle modalità attive / PASV.
Inoltre, HTTP / 1.1 consente richieste parziali molto migliori ("invia solo dal byte 123456 alla fine del file"), richieste condizionate e memorizzazione nella cache ("invia solo se il contenuto è cambiato / se la data dell'ultima modifica modificata") e la compressione del contenuto (gzip).
HTTP è molto più facile da usare attraverso un proxy.
Dalle mie prove aneddotiche, HTTP è più facile da far funzionare con connessioni disconnesse / lente / instabili; ad esempio, non è necessario (ri) stabilire una sessione di accesso prima di (ri) avviare il trasferimento.
OTOH, HTTP è apolide, quindi dovresti fare l'autenticazione e costruire una scia di "chi ha fatto cosa quando" te stesso.
L'unica differenza di velocità che ho notato è il trasferimento di molti piccoli file: HTTP con pipelining è più veloce (riduce i viaggi di andata e ritorno, soprattutto nelle reti ad alta latenza).
Si noti che HTTP / 2 offre ancora più ottimizzazioni, mentre il protocollo FTP non ha visto alcun aggiornamento per decenni (e persino le estensioni a FTP hanno un assorbimento insignificante da parte degli utenti). Quindi, a meno che non si stiano trasferendo file attraverso una macchina del tempo, HTTP sembra aver vinto.
(Tangenzialmente: ci sono protocolli che sono più adatti per il trasferimento di file, come rsync
BitTorrent, ma quelli non hanno la stessa condivisione mentale, mentre HTTP è Everywhere ™)