2012-06-26 28 views
52

我必須開發一個Java應用程序,它必須讀取網絡上的一些文件,編輯它們並將它們放回去。哪個文件訪問最好:Webdav或FTP?

的問題是,我總是這樣(通過網絡)通過FTP協議文件操作。但是,我最近聽說過基於HTTP的Webdav。

有沒有人注意到他們之間的差異(在速度方面)?哪一個是最好的 ?爲什麼他們「發明」Webdav,如果FTP是好的?

+1

這個問題怎麼解決? – Nakilon

+2

我不知道這個問題是否可以重新修改以重新開放。乍一看,FTP和WebDav似乎具有完全相同的用途,並且知道何時使用它們會非常有幫助。 – Ajedi32

+5

相關:[可以要求比較的問題具有建設性嗎?](http://meta.stackoverflow.com/q/251328/1157054)據此,這個問題是無法解決的。另一方面,這個問題目前有近3萬的觀點和衆多的讚美詞,儘管有這樣一個斷言:「這個問題的答案几乎完全基於觀點,而不是事實,參考或具體的專業知識「,這個問題的答案清楚地證明了另外一點。 – Ajedi32

回答

1

webdav的具有關於防火牆容易通過(沒有單獨的控制/數據插座)通過FTP優點。速度應該大致相同,因爲兩種協議都通過原始TCP套接字傳輸文件。

+0

你能多解釋一下嗎? – David

57

的WebDAV通過FTP具有以下優點:

  1. 通過通過一個TCP連接的工作更容易將其配置爲繞過防火牆,NAT和代理。在FTP中,數據通道可能會導致正確的NAT設置問題。

  2. 再次由於一個TCP連接,它可以是持久的,當傳輸很多小文件時WebDAV比FTP快一點 - 不需要爲每個文件建立一個數據連接。

  3. GZIP壓縮是一個標準的HTTP但不適用於FTP(是的,MODE Z的提供的FTP,但它不是在任何標準中定義)。

  4. HTTP具有其未在FTP定義的認證方法廣泛的選擇。例如。 NTLM和Kerberos身份驗證在HTTP和FTP中很常見,除非您編寫FTP的客戶端和服務器端,否則很難獲得適當的支持。

  5. 的WebDAV支持部分轉移和在FTP上傳部分是不可能的(即無法覆蓋在文件的中間的塊)。

還有一兩件事要考慮(取決於你是否控制服務器) - SFTP(SSH文件傳輸協議,不以任何方式與FTP)。 SFTP比WebDAV功能更豐富,SFTP是訪問遠程文件系統的協議,而WebDAV的設計考慮了抽象(WebDAV用於「文檔」,而SFTP用於文件和目錄)。 SFTP具有上述WebDAV的所有優點,並且在管理員和開發人員中更受歡迎。

+0

部分上傳未在任何標準中定義。 – Evert

+0

@Evert什麼*任何*你的意思是?沒有人在HTTP中禁止範圍和內容範圍,所以當客戶端和服務器都可以處理時,這是可能的。 –

+2

這些標頭專門用於_fetching_,不會上傳資源。 httpbis規範特別建議不要將範圍與PUT請求結合使用,因爲它可能會導致不良結果。來源:我是一個主要的webdav服務器的作者,我每天都在瀏覽rfc。 – Evert

24

回答的問題 - Why did they "invent" Webdav

WebDAV的代表Web Distributed Authoring and Versioning

互聯網只是沒有通過網址(Uniform resource locator

意味着資源消耗但是這是它成爲了。

由於HTTP具有很強的語義獲取資源(GET)和(HEAD)。 (POST)提供了有關語義操作數量的覆蓋,而(DELETE)則不信任。 HTTP缺乏像多資源操作一樣的其他特性。

簡而言之,它是讀協議而不是寫協議。

您將通過FTP和許多機制上傳它,從而使您的資源(URL)可用於獲取。

WebDAV應該提供互聯網的缺失故事:支持通過相同的機制HTTP創作資源。它擴展了它的語義,引入了新的HTTP VERBS。

它還引入的機制,不僅要讀,寫,修改和刪除資源(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 

我希望,我已經建立了一些的WebDAV作爲擴展HTTP支持互聯網創作的崇高目標。不知道我們是否已經實現它。

對於你的問題

您的應用程序是一個客戶端,將不得不湊合着用什麼樣的機制可用 - FTP或另一側的WebDAV。如果WebDAV很好用,您可以使用它。但是習慣語義需要一些時間。 FTP具有有限的語義,並且在簡單性方面更勝一籌。如果您已經在使用它,請不要更改它。

這是更快

這是類似於回答,這是更快HTTP或FTP?

在一個狡猾的注意,如果是這樣的問題,我們就不會被下載/通過HTTP上傳文件;)

+1

有趣概述了Web的哲學和WebDav的關係。感謝pyfunc。 –

2

取決於你想要做什麼。 例如,FTP獲取文件列表的開銷是7字節(LIST -a),而Webdav(PROPFIND + 207多狀態)則是370字節。

對於發送某個文件,FTP上的開銷比Webdav上的開銷要低,依此類推。

如果您需要發送/獲取了大量的小文件,FTP將證明更快(使用正確的流水線多個連接,並且每個文件的TCP連接)。 如果您發送/接收大文件,這兩種技術都是相同的,開銷將可以忽略不計。

請參閱: http://www.philippheckel.com/files/syncany-heckel-thesis.pdf

+0

很好的細節和數字 –

+0

所以你說FTP在所有情況下都更好。 –

+0

我在說,如果你打算只發送和接收文件,那麼FTP比Webdav更好。但是,Webdav還有許多其他功能(例如鎖定,共享),在FTP中沒有。如果您處理大文件,那麼與其他功能相比,webdav的開銷可以忽略不計。 – xryl669

4

由於DAV作品在HTTP,你會得到所有的HTTP的是FTP無法提供的好處。

例如:

強認證加密代理支持,和 緩存

這是事實,你可以通過SSH 得到一些這方面的,但HTTP基礎設施比SSH更廣泛地部署。而且,SSH沒有HTTP所具有的豐富的工具,開發庫和應用程序。

DAV傳輸(以及HTTP傳輸)也比FTP更高效。 您可以通過單個TCP連接傳輸多個傳輸, 而FTP需要傳輸每個文件的新連接(加上 控制連接)。

Reference

2

文件修改時間:

似乎有一個差異如何FTP和WebDAV處理文件的修改時間。

似乎在ftp中有一個'命令'來保存那個時間(幾個ftp客戶端和服務器聲稱這麼做),而如果我沒記錯的話,webdav可以獲得文件修改日期,但不能設置它上傳。

owncloud客戶端和一些propriatary WebDAV客戶端似乎有一種變通方法,但只能在他們的軟件

根據使用情況,這是有利於FTP的楊衛國說法。我不希望我的文件的修改日期==上傳日期。在稍後的下載之後,我無法通過日期分辨出我擁有哪個版本的文件。