比较HTTP和FTP以传输文件

时间:2009-04-04 14:42:24

标签: http ftp network-programming file-transfer

通过互联网传输文件有哪些优势(或限制)?

(我知道两种协议的安全形式。我希望通过个人经验在性能,可靠性,文件大小限制等方面进行比较。)

6 个答案:

答案 0 :(得分:85)

这是两者中的performance comparison。 HTTP对小文件的请求 - 响应响应更快,但如果正确调整,FTP对于大文件可能更好。过去,FTP通常被认为更快。 FTP需要一个控制通道,并且除了TCP状态之外还要维护状态,但HTTP不需要。在数据开始在FTP中传输之前有6个数据包传输,但在HTTP中只有4个。

我认为正确调整的TCP层对速度的影响要大于应用层协议之间的差异。太阳蓝图Understanding Tuning TCP有详细信息。

每个协议的另外good comparison个别特征。

答案 1 :(得分:25)

许多防火墙都会丢弃不属于端口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™)

答案 2 :(得分:24)

我只是通过FTP和HTTP对文件传输进行基准测试:

  • 两个非常好的服务器连接
  • 使用相同的1GB .zip文件
  • 在相同的网络条件下(一个接一个地测试)

结果:

  • 使用FTP:6分钟
  • 使用HTTP:4分钟
  • 使用并发的http下载软件(fdm):1分钟

所以,基本上处于“现实生活”的情况下:

1)下载一个大文件时,HTTP比FTP快。

2)HTTP可以使用并行块下载,这使得它比FTP快6倍,具体取决于网络条件。

答案 3 :(得分:12)

一个考虑因素是FTP可以使用非标准端口,这可以使防火墙变得困难(特别是如果您使用SSL)。 HTTP通常位于已知端口上,因此这很少成为问题。

如果您决定使用FTP,请务必阅读Active and Passive FTP

就性能而言,在一天结束时,他们都是直接沿着TCP连接喷出文件,所以应该大致相同。

答案 4 :(得分:0)

FTP的一个优点是存在一种使用bool Equal_Column(int rows, int cols, int i, int j, int T1[rows][cols]) { for (int k = 0; k < rows; k++) { if (T1[k][i] != T2[k][j]) { return false; } } return true; } void Know_Equal_Column(int rows, int cols, int T1[rows][cols]) { for (int i = 0; i < cols; i++) { for (int j = i + 1; j < cols; j++) { if (Equal_Column(rows, cols, i, j, T1)) { printf("\nThe two columns %d and %d are identical!\n", i, j); } } } } int main() { int rows, cols; do { printf("Give n the number of lines in this matrix : "); if (scanf("%d", &rows) != 1) return 1; } while (rows < 1); do { printf("Give n the number of columns in this matrix : "); if (scanf("%d", &cols) != 1) return 1; } while (cols < 1); /* define the 2D matrix with variable dimensions as local VLA. note that this feature is optional as of the latest version of the C Standard. also note that large values of cols or rows may cause undefined behavior */ int T1[rows][cols]; printf("\nThe filling of this matrix : \n\n"); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (scanf("%d", &T1[i][j]) != 1) return 1; } } Know_Equal_Column(rows, cols, T1); return 0; } dir列出文件的标准方法。因此,ftp与rsync之类的工具配合使用非常好。当然,ls通常是在rsync之上完成的,但是可以选择。

答案 5 :(得分:-4)

它们都使用TCP作为传输协议,但HTTP使用持久连接,这使得TCP的性能更好。