哪种文件访问方式更好:Webdav还是FTP?

86

我需要开发一个Java应用程序,它需要读取网络上的一些文件,对其进行编辑并将其放回。

问题在于我总是通过FTP协议(通过网络)执行文件操作。但是,我最近听说了基于HTTP的Webdav。

有人注意到它们之间的差异(速度方面)吗?哪一个更好?如果FTP已经很好了,为什么还要“发明”Webdav?


6
我想知道这个问题是否可以改写一下以便重新打开。FTP和WebDav乍一看似乎具有完全相同的用途,知道何时使用其中之一将非常有帮助。请问是否能够重新表述这个问题? - Ajedi32
15
相关链接:提问比较是否有建设性? 根据相关链接的内容,这个问题是无法挽回的。另一方面,这个问题目前已经有将近3万次的浏览,并且得到众多赞同,尽管关闭原因中声称“对这个问题的回答往往基于意见而不是事实、参考或特定专业知识”,但这个问题的回答明显证明了相反的情况。 - Ajedi32
6个回答

90

WebDAV相对于FTP具有以下优势:

  1. 通过一个TCP连接工作,更容易配置以绕过防火墙、NAT和代理。在FTP中,数据通道可能会导致正确的NAT设置出现问题。

  2. 由于只有一个TCP连接(可以持久存在),当传输许多小文件时,WebDAV比FTP稍微快一些 - 不需要为每个文件建立数据连接。

  3. GZIP压缩是HTTP的标准,但不是FTP的标准(是的,FTP提供了MODE Z,但它没有在任何标准中定义)。

  4. HTTP拥有广泛的身份验证方法,这些方法在FTP中未被定义。例如,NTLM和Kerberos身份验证在HTTP中很常见,在FTP中很难得到适当的支持,除非你编写FTP的客户端和服务器端。

  5. WebDAV支持部分传输,在FTP中无法进行部分上传(即您无法覆盖文件中间的某个块)。

还有一件事要考虑(取决于您是否控制服务器)- SFTP(SSH文件传输协议,与FTP无关)。 SFTP比WebDAV更丰富,并且SFTP是用于访问远程文件系统的协议,而WebDAV是考虑抽象层次而设计的(WebDAV是用于“文档”,而SFTP是用于文件和目录)。 SFTP具有WebDAV上述所有优点,并且在管理员和开发人员中更受欢迎。


3
这些标头是专门用于获取资源,而不是上传资源。HTTPbis规范明确建议不要在使用PUT请求时与范围一起使用,因为这可能会导致意外的结果。来源:我是一家主要WebDAV服务器的作者,每天都会涉及阅读RFC文档。 - Evert
1
@Evert 只需要服务器在收到范围请求时报告不支持即可。这只需要服务器开发人员稍加注意即可 ;)。 - Eugene Mayevski 'Callback
2
好吧,只要记住那段话是因为现实世界中的问题才被添加进去的,而不是因为他们想要更具限制性。 - Evert
1
@elmarco,你似乎把文件访问(问题所在)和远程文档管理混淆了。我们在谈论文件访问。至于“广泛的操作系统支持”——这是无稽之谈,因为SFTP的客户端和服务器都适用于从Unix到Windows再到Java、Android和iOS等现代平台(是的,那里也有服务器)。 - Eugene Mayevski 'Callback
1
@EugeneMayevski'EldoSCorp 苹果和橙子;我显然指的是操作系统客户端集成支持:“能够在资源管理器/搜索器/Nautilus中挂载远程文件系统”。 - elmarco
显示剩余12条评论

36

问题的答案 - 为什么他们要“发明”Webdav

WebDAV代表Web分布式创作和版本控制

互联网本来不是用于通过url(统一资源定位符)消耗资源的。

但它变成了这样。

因为HTTP有强大的语义来获取资源(GET)和(HEAD)。 (POST)提供了许多语义操作的覆盖范围,而(DELETE)则笼罩在不信任中。 HTTP缺乏其他一些特性,例如多资源操作。

简而言之,它是读取协议而不是写入协议。

您需要绕道上传资源(URL),以使其可通过FTP和许多其他机制进行获取。

WebDAV旨在提供互联网上缺失的故事:通过相同的机制HTTP支持创作资源。 它扩展了其语义,引入了新的HTTP动词。

它还引入了机制,可以对资源的元属性进行查询和修改,而不仅仅是读取,写入,修改和删除资源(URI)。 这并不是说以前不能做到这一点,而是通过后门机制完成的。

所以你可以看到,它将一些你在桌面文件操作中期待的机制带到了互联网资源上。
以下是一些类比:
MKCOL     ----- make collection ----- similar to make folder
PROPGET   ---- get properties (meta?) --- same as get info or extended attributes on mac
PROPPATCH --- modify properties
COPY      ---- cp
MOVE      ---- mv

我希望,作为HTTP的扩展支持互联网创作,WebDAV已经确立了一些崇高的目标。不确定我们是否已经实现了它。
对于你的问题,
你的应用程序是客户端,将不得不利用可用的机制 - FTP或WebDAV在另一侧。如果WebDAV可用,那太好了,你可以使用它。但需要一些时间来适应语义。FTP具有有限的语义,并擅长简单性。如果您已经在使用它,请勿更改它。
哪个更快
这就像回答HTTP或FTP哪个更快?
顺便说一句,如果这是一个问题,我们就不会通过HTTP下载/上传文件;)

2
很有趣地概述了Web的哲学以及WebDav的关系。感谢pyfunc。 - O'Rooney

6
由于 DAV 是基于 HTTP 的,因此它可以提供 FTP 无法提供的所有 HTTP 好处。
例如:
- 强大的身份验证 - 加密 - 代理支持 - 缓存
虽然通过 SSH 也能实现一些相似的功能,但是 HTTP 基础架构比 SSH 更广泛地部署。此外,SSH 没有 HTTP 具备的丰富工具、开发库和应用程序。
DAV 的(即 HTTP 的)传输效率也比 FTP 更高。您可以通过单个 TCP 连接对多个传输进行管道化处理,而 FTP 对于每个传输都需要一个新连接(加上控制连接)。 参考资料

4
取决于您想要做什么。例如,使用FTP获取文件列表的开销为7字节(LIST -a),而使用Webdav则为370字节(PROPFIND + 207 Multi Status)。
对于发送某些文件,FTP的开销比Webdav低,等等。
如果您需要发送/获取大量小文件,则FTP将证明更快(使用多个连接进行正确的流水线处理和每个文件的TCP连接)。如果您正在发送/接收大文件,则两种技术相同,开销将可忽略不计。
请参见:http://www.philippheckel.com/files/syncany-heckel-thesis.pdf

很好的细节和数字。 - Jonathan
2
WebDAV 可能使用更少的字节,但 FTP 需要更多的连接。如果延迟较低且数据包较小,则 FTP 可能更快,但在大部分现代互联网上,带宽是相当可观的,而延迟并不一定很好 - 在这种情况下,(流水线式)WebDAV 很可能比 FTP 更优秀。 - Eamon Nerbonne
2
通过加密技术,穿透防火墙和 NAT 网络地址转换等限制,WebDAV 的可用性比 FTP(S) 更高。原因在于,FTP 需要进行内容重写和嗅探才能正常工作。 - Gert van den Berg
没错。如果你是本地用户(正如OP所暗示的那样),并且只关心文件传输,FTP可能仍然更好。 - xryl669
我想知道为什么没有人提到真正的开销:Web服务器的延迟。我的意思是,你需要Apache 2和PHP来运行像SabreDAV这样的WebDAV服务器,而像vsftpd这样的FTP服务器使用机器代码。 - mgutt
显示剩余2条评论

2

文件修改时间:

似乎FTP和WebDAV处理文件修改时间的方式有所不同。

看起来FTP中有一个“命令”来保留该时间(几个FTP客户端和服务器声称能够这样做),而如果我没记错的话,WebDAV可以获取文件修改日期但无法在上传时设置它。

OwnCloud客户端和一些专有的WebDAV客户端似乎有一种解决方法,但这只适用于他们的软件。

根据使用情况,这是支持FTP的有力论据。我不想让我的文件修改日期等于上传日期。在稍后下载后,我将无法通过日期知道我拥有哪个文件版本。


2

相对于FTP,Webdav在通过防火墙时更容易(没有单独的控制/数据套接字)。速度应该大致相同,因为两个协议都在原始TCP套接字上传输文件。


你能再详细解释一下吗? - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接