我需要开发一个Java应用程序,它需要读取网络上的一些文件,对其进行编辑并将其放回。
问题在于我总是通过FTP协议(通过网络)执行文件操作。但是,我最近听说了基于HTTP的Webdav。
有人注意到它们之间的差异(速度方面)吗?哪一个更好?如果FTP已经很好了,为什么还要“发明”Webdav?
我需要开发一个Java应用程序,它需要读取网络上的一些文件,对其进行编辑并将其放回。
问题在于我总是通过FTP协议(通过网络)执行文件操作。但是,我最近听说了基于HTTP的Webdav。
有人注意到它们之间的差异(速度方面)吗?哪一个更好?如果FTP已经很好了,为什么还要“发明”Webdav?
WebDAV相对于FTP具有以下优势:
通过一个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上述所有优点,并且在管理员和开发人员中更受欢迎。
问题的答案 - 为什么他们要“发明”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
文件修改时间:
似乎FTP和WebDAV处理文件修改时间的方式有所不同。
看起来FTP中有一个“命令”来保留该时间(几个FTP客户端和服务器声称能够这样做),而如果我没记错的话,WebDAV可以获取文件修改日期但无法在上传时设置它。
OwnCloud客户端和一些专有的WebDAV客户端似乎有一种解决方法,但这只适用于他们的软件。
根据使用情况,这是支持FTP的有力论据。我不想让我的文件修改日期等于上传日期。在稍后下载后,我将无法通过日期知道我拥有哪个文件版本。
相对于FTP,Webdav在通过防火墙时更容易(没有单独的控制/数据套接字)。速度应该大致相同,因为两个协议都在原始TCP套接字上传输文件。