De nombreux pare-feu abandonnent les connexions sortantes qui ne sont pas vers les ports 80 ou 443 (http & https); certains abandonnent même les connexions à ces ports qui ne sont pas HTTP (S). FTP peut être autorisé ou non, sans parler des modes actifs / PASV.
En outre, HTTP / 1.1 permet de bien meilleures requêtes partielles ("envoyer uniquement de l'octet 123456 à la fin du fichier"), des requêtes conditionnelles et de la mise en cache ("envoyer uniquement si le contenu a changé / si la date de la dernière modification a été modifiée") et la compression du contenu (gzip).
HTTP est beaucoup plus facile à utiliser via un proxy.
D'après mes preuves anecdotiques, HTTP est plus facile à faire fonctionner avec des connexions abandonnées / lentes / irrégulières; par exemple, il n'est pas nécessaire de (ré) établir une session de connexion avant de (ré) lancer le transfert.
OTOH, HTTP est sans état, vous devrez donc vous authentifier et créer vous-même une trace de "qui a fait quoi et quand".
La seule différence de vitesse que j'ai remarquée est le transfert de nombreux petits fichiers: HTTP avec pipelining est plus rapide (réduit les allers-retours, surtout perceptible sur les réseaux à forte latence).
Notez que HTTP / 2 offre encore plus d'optimisations, alors que le protocole FTP n'a pas vu de mises à jour depuis des décennies (et même les extensions de FTP ont une adoption insignifiante par les utilisateurs). Donc, à moins que vous ne transfériez des fichiers via une machine à remonter le temps, HTTP semble avoir gagné.
(Tangentiellement: il existe des protocoles mieux adaptés pour le transfert de fichiers, comme rsync
ou BitTorrent, mais ceux-ci n'ont pas autant de partage d'esprit, alors que HTTP est Everywhere ™)