在 Internet 上传输文件时,一个比另一个有什么优势(或限制)?
(我知道这两种协议的安全形式。我想听听个人经验在性能、可靠性、文件大小限制等方面的比较。)
在 Internet 上传输文件时,一个比另一个有什么优势(或限制)?
(我知道这两种协议的安全形式。我想听听个人经验在性能、可靠性、文件大小限制等方面的比较。)
这是两者的性能比较。HTTP 对小文件的请求响应更敏感,但如果调整得当,FTP 对大文件可能会更好。过去通常认为 FTP 速度更快。除了 TCP 状态之外,FTP 还需要一个控制通道和状态,但 HTTP 不需要。在数据开始在 FTP 中传输之前有 6 次数据包传输,但在 HTTP 中只有 4 次。
我认为经过适当调整的 TCP 层对速度的影响比应用层协议之间的差异更大。Sun Blueprint Understanding Tuning TCP有详细信息。
这是对每个协议的各个特性的另一个很好的比较。
我刚刚对通过 FTP 和 HTTP 的文件传输进行了基准测试:
结果:
fdm
):1 分钟所以,基本上在“现实生活”的情况下:
1) 下载一个大文件时,HTTP 比 FTP 快。
2) HTTP 可以使用并行块下载,这使得它比 FTP 快 6 倍,具体取决于网络条件。
许多防火墙会丢弃不在端口 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™)
一个考虑因素是 FTP 可以使用非标准端口,这会使通过防火墙变得困难(尤其是如果您使用 SSL)。HTTP 通常位于已知端口上,因此这很少会成为问题。
如果您决定使用 FTP,请务必阅读有关主动和被动 FTP的信息。
就性能而言,归根结底,它们都直接通过 TCP 连接发送文件,所以应该差不多。
FTP 的一个优点是有一种使用dir
或列出文件的标准方法ls
。因此,ftp 可以很好地与rsync等工具配合使用。当然,rsync
通常已经完成ssh
,但选项就在那里。
两者都使用 TCP 作为传输协议,但 HTTP 使用持久连接,这使得 TCP 的性能更好。