我必须开发一个 Java 应用程序,它必须读取网络上的一些文件,编辑它们并将它们放回去。
问题是我总是(通过网络)通过 FTP 协议进行文件操作。但是,我最近听说了基于 HTTP 的 Webdav。
有没有人注意到它们之间的差异(在速度方面)?哪一个是最好的 ?如果 FTP 有好处,他们为什么要“发明”Webdav?
与 FTP 相比,WebDAV 具有以下优点:
通过一个 TCP 连接工作,可以更轻松地将其配置为绕过防火墙、NAT 和代理。在 FTP 中,数据通道可能会导致正确的 NAT 设置出现问题。
同样由于一个 TCP 连接可以持久,WebDAV 在传输许多小文件时会比 FTP 快一点 - 无需为每个文件建立数据连接。
GZIP 压缩是 HTTP 的标准,但不是 FTP 的标准(是的,FTP 中提供了 MODE Z,但没有在任何标准中定义)。
HTTP 有多种身份验证方法可供选择,这些方法未在 FTP 中定义。例如。NTLM 和 Kerberos 身份验证在 HTTP 和 FTP 中很常见,除非您同时编写 FTP 的客户端和服务器端,否则很难获得对它们的适当支持。
WebDAV 支持部分传输,并且在 FTP 中部分上传是不可能的(即,您不能覆盖文件中间的块)。
还有一件事需要考虑(取决于您是否控制服务器) - SFTP(SSH 文件传输协议,与 FTP 没有任何关系)。SFTP 比 WebDAV 功能更丰富,SFTP 是一种访问远程文件系统的协议,而 WebDAV 在设计时考虑到了抽象(WebDAV 用于“文档”,而 SFTP 用于文件和目录)。SFTP 具有上述 WebDAV 的所有优点,并且在管理员和开发人员中更受欢迎。
回答问题 -Why did they "invent" Webdav
WebDAV 代表Web Distributed Authoring and Versioning
.
互联网并不意味着通过 url 消耗资源(统一资源定位器)
但这就是它变成的样子。
因为 HTTP 具有用于获取资源 (GET) 和 (HEAD) 的强大语义。(POST) 覆盖了语义操作的数量,而 (DELETE) 则被不信任所笼罩。HTTP 缺乏其他一些特性,例如多资源操作。
简而言之,它是读取协议而不是写入协议。
您可以通过 FTP 和许多机制上传您的资源 (URL) 以供获取。
WebDAV 应该提供互联网缺失的故事:支持通过相同的机制 HTTP 创作资源。它扩展了它的语义,引入了新的 HTTP VERBS。
它还引入了机制,不仅可以读取、写入、修改和删除资源(uris),还可以查询和修改资源的元属性。不是你以前做不到,而是通过后门机制完成的。
所以你看,它为互联网资源带来了一些你期望在桌面上进行文件操作的相同机制。
以下是一些类比:
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
我希望,我已经确立了 WebDAV 的一些崇高目标,作为 HTTP 的扩展,以支持互联网创作。不知道我们是否已经实现了它。
对于你的问题
您的应用程序是一个客户端,必须使用可用的机制 - 另一端的 FTP 或 WebDAV。如果 WebDAV 可用,您可以使用它。但是需要一些时间来适应语义。FTP 具有有限的语义并且擅长于简单性。如果您已经在使用它,请不要更改它。
哪个更快
这类似于回答,哪个更快 HTTP 或 FTP?
狡猾地指出,如果这是一个这样的问题,我们就不会通过 HTTP 下载/上传文件;)
由于DAV通过HTTP工作,因此您可以获得 FTP 无法提供的 HTTP 的所有好处。
例如:
强身份验证、加密、代理支持和 缓存。
的确,您可以通过SSH获得其中的一些,但HTTP 基础设施的部署比 SSH 广泛得多。此外,SSH 没有 HTTP 所具备的广泛的工具、开发库和应用程序。
DAV 传输(嗯,HTTP 传输)也比 FTP 更有效。您可以通过单个 TCP 连接进行多次传输,而 FTP 需要为每个传输的文件建立一个新连接(加上控制连接)。
取决于你想做什么。例如,FTP 上获取文件列表的开销是 7 个字节(LIST -a),而使用 Webdav(PROPFIND + 207 多状态)是 370 个字节。
对于发送一些文件,FTP 的开销比 Webdav 低,依此类推。
如果您需要发送/获取大量小文件,FTP 会更快(使用多个连接进行正确的流水线操作,以及每个文件的 TCP 连接)。如果您要发送/接收大文件,两种技术都是一样的,开销可以忽略不计。
请参阅: http ://www.philippheckel.com/files/syncany-heckel-thesis.pdf
文件修改时间:
ftp 和 webdav 处理文件修改时间的方式似乎有所不同。
似乎 ftp 中有一个“命令”来保留该时间(几个 ftp 客户端和服务器声称这样做),而 webdav,如果我没记错的话,可以获取文件修改日期,但不能在上传时设置它。
owncloud 客户端和一些专有的 webdav 客户端似乎有一种解决方法,但这仅适用于他们的软件
根据使用情况,这是支持 ftp 的有力论据。我不希望我的文件有修改日期 == 上传日期。稍后下载后,我无法按日期判断我拥有哪个版本的文件。
Webdav 在轻松通过防火墙(没有单独的控制/数据套接字)方面优于 FTP。速度应该与两种协议通过原始 tcp 套接字传输文件的速度大致相同。