Nginx WebDAV模塊試用


 WebDAV (Web-based Distributed Authoring and Versioning)是基於 HTTP 1.1 的一個通信協議。它為 HTTP 1.1 添加了一些擴展(就是在 GET、POST、HEAD 等幾個 HTTP 標准方法以外添加了一些新的方法),使得應用程序可以直接將文件寫到 Web Server 上,並且在寫文件時候可以對文件加鎖,寫完后對文件解鎖,還可以支持對文件所做的版本控制。這個協議的出現極大地增加了 Web 作為一種創作媒體對於我們的價值。基於 WebDAV 可以實現一個功能強大的內容管理系統或者配置管理系統。

由於 Web 已經成為 Internet 的基礎,因此 HTTP 1.1(超文本傳送協議)被證實是用來傳輸數據的非常靈活的通用協議。 但是,HTTP 存在一些明顯的缺點,從而限制了它作為綜合的 Internet 通訊協議而被采用:它非常適合用於查看的靜態文檔,但不能提供以足夠復雜(以便向客戶端提供豐富的創作功能)的方式來處理文檔的方法。例如,當兩個作者在未進行交流的情況下同時對一個文檔進行更改時,就會出現“更新丟失”問題。 只有由最后一個作者完成、並將修改后的文檔重新上載到服務器的修改才會保留下來,另一個作者進行的更改將丟失。

IETF WebDAV 工作組的目標是,設計一個協議,它提供基於萬維網的分布式創作和版本控制。 當前的 WebDAV 規范 (IETF RFC 2518) 解決協作式創作工具的三個主要問題:

  • 改寫保護。HTTP 1.1 無法確保客戶端可以保護資源,並且可以在其他客戶端同時編輯它們的情況下進行更改。 使用 WebDAV,可以通過多種方式來鎖定資源,以便讓其他客戶端知道您對所討論的資源感興趣,或者防止其他客戶端訪問該資源。
  • 資源管理。HTTP 只能直接訪問單個資源。 WebDAV 提供一種更有效地組織數據的方法。 WebDAV 引入了可包含資源的集合(類似於文件系統文件夾)概念。 通過 WebDAV 進行的資源管理包括如下功能:創建、移動、復制和刪除集合,以及集合中的資源或文件。
  • 文檔屬性。不同類型的數據具有唯一的屬性,這有助於描述數據。 例如,在電子郵件中,這些屬性可能是發件人的姓名和接收郵件的時間。 在協作文檔中,這些屬性可能是文檔原始作者的姓名和最后一個編輯者的姓名。 因為人們使用的文檔類型各不相同,所以可能的屬性類型列表也變得無限大。 XML 是 WebDAV 所需的一種可擴展通訊工具。

WebDAV 本身是一個類似於 HTTP 的通信協議(IETF RFC 2518)。它與 HTTP 類似,需要實現服務器和客戶端兩部分軟件。目前 WebDAV 已經有了大量相關的軟件實現。在這里是一些與 WebDAV 相關的軟件項目。目前 Apache 服務器和 IIS(5.0以上版本)服務器都支持WebDAV,當然Javaer 肯定會用 Tomcat + slide。這里只介紹Nginx。

Nginx原始的WebDAV模塊HttpDavModule對協議支持很不完善,連HTTP OPTIONS請求都不支持,不過好在有人寫了WebDAV擴展模塊,至此Nginx支持了幾乎所有的HTTP請求:PUT DELETE MKCOL COPY MOVE PROPFIND OPTIONS。(這里有篇文章是介紹Nginx + Subversion的,目前Nginx對SVN支持還不完善,需要借助其他方法,比如“轉發給Apache”或者“nginx + php”)。下面是Nginx完整配置:

location / {
  dav_methods PUT DELETE MKCOL COPY MOVE;
  dav_ext_methods PROPFIND OPTIONS;
  create_full_put_path on;
  dav_access group:rw all:rw;
  root /var/root/;
  client_body_temp_path /var/tmp/;
}

WebDAV客戶端我試用了cadaver(還有另一個客戶端fusedav我也很感興趣。下面這個圖是對Nginx上資源的操作,資源包括:“兩個空文件夾,一個圖片文件”。可見當Nginx支持WebDAV時,可以根據協議對文件進行一些簡單操作,例如:list move copy等。當然,這里只體現了WebDAV協議“資源管理”的優勢,它還能做其他的事。

下面這個圖是操作對應的Nginx日志,我們能看到以往不能看到的HTTP請求,OPTIONS 有木有,PROPFIND MOVE COPY 有木有!

參考

  1. http://baike.baidu.com/view/974023.htm
  2. http://wiki.nginx.org/HttpDavModule
  3. https://github.com/arut/nginx-dav-ext-module
  4. tomcat集成webdav


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM