通过互联网传输文件有哪些优势(或限制)?
(我知道两种协议的安全形式。我希望通过个人经验在性能,可靠性,文件大小限制等方面进行比较。)
答案 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对文件传输进行基准测试:
结果:
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的性能更好。