Web 伺服器 支援 WebDAV (即網路型分散式創作和版本控制,這是一種網路型協同作業的標準)。WebDAV 是 HTTP/1.1 協定的延伸,允許用戶端執行遠端 Web 內容創作作業。
完整的 WebDAV 作業事件包含啟用 WebDAV 的伺服器 (如可處理 WebDAV 資源請求的 Web 伺服器 ) 以及啟用 WebDAV 的用戶端 (如支援啟用 WebDAV 的 Web 發佈請求之 Adobe® GoLive® 或 Macromedia® DreamWeaver®)。
在伺服器端,您必須啟用並配置 Web 伺服器 才能為 WebDAV 請求提供服務。
您可能會因為以下原因而對 WebDAV 進行配置: 例如調校伺服器效能、消除安全性風險或提供無衝突遠端創作的環境。
為了滿足您的配置要求,可以變更伺服器對 WebDAV 資源的最短鎖定時間、集合上 PROPFIND 請求的深度以及請求內文所允許的最大 XML 內容大小等等。
您可以在虛擬伺服器層級,為虛擬伺服器下的所有集合配置預設 WebDAV 屬性。此處配置的值與 server.xml 檔案中的 DAV 元素相對應。
也可以在集合層級配置 WebDAV 屬性,這將置換所有為集合配置的虛擬伺服器層級屬性。在集合層級配置的屬性值與 server.xml 檔案中的 DAVCOLLECTION 元素相對應。
WebDAV 是 HTTP/1.1 協定的延伸,所增加之新的 HTTP 方法和標頭,可提供任意類型的 Web 資源創作,除了 HTML 和 XML 之外,還支援文字、圖形、試算表以及所有其他格式。使用 WebDAV 可以完成的某些工作包括:
特性 (中介資料) 處理。您可以使用 WebDAV 的 PROPFIND 和 PROPPATCH 方法,建立、移除和查詢有關網頁的資訊,例如作者和建立日期。
集合與資源管理。 您可以使用 WebDAV 的 GET、PUT、DELETE 和 MKCOL 方法,建立文件集並擷取階層式成員關係清單 (類似於檔案系統中的目錄清單)。
鎖定。 您可以使用 WebDAV 禁止多人同時對一個文件進行操作。可以透過 WebDAV 的 LOCK 和 UNLOCK 方法,使用專用鎖定或共用鎖定,防止發生「遺失更新」(變更被覆寫) 問題。
名稱空間作業。您可以使用 WebDAV 的 COPY 和 MOVE 方法,讓伺服器複製和移動 Web 資源。
Web 伺服器 中的 WebDAV 支援可提供下列功能:
與 RFC 2518 的相容性以及與 RFC 2518 用戶端的相互可操作性。
用於發佈的安全性和存取控制。
對基於檔案系統的 WebDAV 集合和資源的有效發佈作業。
本節概述了使用 WebDAV 時經常遇到的術語。
URI。URI (統一資源識別碼) 是一種檔案識別碼,透過使用縮寫的 URL 提供一層額外的安全性。URL 的第一部分取代為 URL 對映,該對映可對使用者隱藏檔案的完整實體路徑名稱。
來源 URI。術語「來源 URI」是指可在該處存取資源來源的 URI。若要瞭解來源 URI 這一概念,請參閱以下範例:
一個名為 foo.jsp 的 JSP 頁面位於 URI/docs/date.jsp 處。該頁面包含 HTML 標記和 Java 程式碼,當執行該程式碼時,將在用戶端的瀏覽器中列印當天的日期。當伺服器收到來自用戶端對 foo.jsp 的 GET 請求後,會先執行該 Java 程式碼,然後才提供該頁面。用戶端不會收到駐留在伺服器上的 foo.jsp 頁面,而是收到一個顯示目前日期之動態產生的頁面。
如果建立了一個來源 URI (例如/publish/docs) 並將其對映至包含 foo.jsp 的 /docs 目錄,則對 /publish/docs/foo.jsp 的請求將是對 /docs/foo. jsp JSP 頁面來源碼的請求。在這種情況下,伺服器會直接提供頁面而不執行 Java 程式碼。用戶端會收到未經處理的頁面,與儲存在磁碟中的頁面一樣。
這樣,對來源 URI 的請求也就成了對資源來源的請求。
集合。WebDAV 集合是為 WebDAV 作業啟用的資源或資源集。集合包含一組稱為成員 URI 的 URI,它們識別啟用了 WebDAV 的成員資源。
內部成員 URI。與集合 URI 直接相對的成員 URI。例如,若 URL 為 http://info.sun.com/resources/info 的資源啟用了 WebDAV,並且 URL 為 http://info.sun.com/resources/ 的資源也啟用了 WebDAV,則 URL 為 http://info.sun.com/resources/ 的資源就是一個集合,它包含 http://info.sun.com/resources/info,並以其做為內部成員。
特性。包含有關資源的描述性資訊的「名稱/值」對。使用特性可以有效地查找和管理資源。例如,或許可以使用特性「creationdate」依資源的建立日期對全部資源進行索引,或者使用特性「author」依作者姓名進行索引。
動態特性。由伺服器強制執行的特性。例如,動態特性 getcontentlength 有一個值,即由 GET 請求傳回的實體長度,它是由伺服器自動計算的。動態特性具有以下特徵:
特性值是唯讀的,由伺服器維護
特性值由用戶端維護,但是伺服器對提交的值執行語法檢查。
靜態特性。伺服器未強制執行的特性。伺服器僅記錄靜態特性的值;用戶端負責維護其一致性。
伺服器支援下列動態特性:
creationdate
displayname
getcontentlanguage
getcontentlength
getcontenttype
gettag
getlastmodified
lockdiscovery
resourcetype
supportedlock
executable
伺服器支援的動態特性 executable,可讓用戶端變更與資源相關聯的檔案權限。
以下為對 executable 動態特性 PROPPATCH 請求的範例:
PROPPATCH /test/index.html HTTP/1.1
Host: sun
Content-type: text/xml
Content-length: XXXX
<?xml version="1.0"?>
<A:propertyupdate xmlns:A="DAV:" xmlns:B="http://apache.org/dav/props/">
<A:set>
<A:prop>
<B:executable>T</B:executable>
</A:prop>
</A:set>
</A:propertyupdate>
鎖定。鎖定資源功能提供了這樣一種機制,即可以保證一個使用者編輯資源時,其他使用者不能進行修改。鎖定可以防止發生覆寫衝突並解決了「遺失更新」問題。
伺服器支援兩種類型的鎖定:共用與專用。
新增 HTTP 標頭。WebDAV 透過延伸 HTTP/1.1 協定進行工作。它定義了新的 HTTP 標頭,用戶端可以通過該標頭傳送 WebDAV 資源請求。這些標頭為:
Destination:
Lock-Token:
Timeout:
DAV:
If:
Depth:
Overwrite:
新的 HTTP 方法。 WebDAV 推出了數種新的 HTTP 方法,可指示啟用 WebDAV 的伺服器如何處理請求。這些方法是對現有方法 (例如GET、PUT 和 DELETE) 的補充,用來執行 WebDAV 異動。下面簡要描述了這些新 HTTP 方法:
COPY。用於複製資源。當 Destination: 標頭指定目標時,使用 Depth: 標頭複製集合。必要時 COPY 方法也會使用 Overwrite: 標頭。
MOVE。用於移動資源。當 Destination: 標頭指定目標時,使用 Depth: 標頭移動集合。在適當情況下,MOVE 方法也使用 Overwrite: 標頭。
PROPFIND。用於擷取一個或多個資源中的一個或多個特性。當用戶端向伺服器提交對某個集合的 PROPFIND 請求時,該請求可能會包含一個值 為 0、1 或 infinity 的 Depth: 標頭。
0。指定將會擷取指定 URI 位置的集合特性。
1。指定將會擷取集合特性以及直接位於指定 URI 之下的資源特性。
infinity。指定將會擷取集合及其包含的全部成員 URI 的特性。請注意,由於深度為無窮大的請求需要遍歷整個集合,因而會顯著增加伺服器的負擔。
您可以使用管理伺服器來為整個伺服器啟用 WebDAV。執行此作業時,以下指令將增加至用於載入 WebDAV Plugin 的 magnus.conf file 檔案中:
Init fn="load-modules" shlib="/s1ws6.1/lib/libdavplugin.so" funcs="init-dav,ntrans-dav,pcheck-dav,service-dav" shlib_flags="(global|now)" Init fn="init-dav" LateInit=yes
init-dav 初始化功能會初始化並註冊 WebDAV 子系統。
若要啟用 WebDAV,請在 CLI 中執行以下指令。
wadm> enable-webdav --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=test |
請參閱 CLI 參考enable-webdav(1)。
若要啟用 WebDAV 集合,請執行以下指令:
wadm> enable-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
請參閱 CLI 參考enable-dav-collection(1)。
若要停用 WebDAV 集合,請執行以下指令:
wadm> disable-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
請參閱 CLI 參考disable-dav-collection(1)。
若要增加 WebDAV 集合,請執行以下指令:
wadm> create-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 --source-uri=/dav_config1 |
請參閱 CLI 參考create-dav-collection(1)。
若要列出所有 WebDAV 集合,請執行以下指令:
wadm> list-dav-collections --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 |
請參閱 CLI 參考list-dav-collections(1)。
若要移除 WebDAV 集合,請執行以下指令:
wadm> delete-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
請參閱 CLI 參考delete-dav-collection(1)。
若要設定伺服器層級的 WebDAV 特性,請執行以下指令:
wadm> set-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 acl-max-entries=120 |
請參閱 CLI 參考set-webdav-prop(1)。
若要檢視伺服器層級的 WebDAV 特性,請執行以下指令:
wadm> get-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 |
請參閱 CLI 參考get-webdav-prop(1)。
若要設定 WebDAV 集合特性,請執行以下指令:
wadm> set-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 min-lock-timeout=1 |
請參閱 CLI 參考set-dav-collection-prop(1)。
若要檢視 WebDAV 集合特性,請執行以下指令:
wadm> get-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 -config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
請參閱 CLI 參考get-dav-collection-prop(1)。
下表列出一些常見的 WebDAV 特性:
表 10–1 WebDAV 參數
參數 |
說明 |
---|---|
鎖定資料庫路徑 |
指定將在其中維護鎖定資料庫的目錄。 |
最小鎖定逾時 |
指定鎖定的最小使用期限 (以秒為單位)。值 -1 表示鎖定永遠不會過期。此值表示鎖定被自動移除之前某元素被鎖定的時間。 |
最大請求大小 |
指定 XML 請求內文的最大大小。您應配置此值以防止系統遭受可能的阻斷服務攻擊。預設值為 8192 (8K)。 |
最大展開特性深度 |
指定展開特性的深度。0 僅適用於指定的資源。這是預設值。1 套用於指定的資源和下一層級。infinity 套用於指定的資源及其包含的所有資源。限制此參數的大小,還可防止過度消耗記憶體。 |
預設所有者 |
集合的預設所有者。 |
URI |
將啟用 WebDAV 的現有根目錄 URI。 |
最大 PROPFIND 深度 |
傳送至集合之 PROPFIND 請求的最大深度。 |
鎖定資料庫更新間隔 |
WebDAV 鎖定資料庫與磁碟同步的間隔。使用 0 可停用快取 WebDAV 鎖定資訊。 |
認證資料庫 |
使用的 ACL 認證資料庫。 |
認證方法 |
使用的認證方法。預設認證方法為「基本」。 |
認證提示文字 |
請求認證時向用戶端顯示的提示。 |
DAV ACL 資料庫 | |
最大項目數 |
允許單個資源上擁有的最大 ACE 數目。0–2147.0483647.0。指定 —1 表示無限制。 |
最大大小 |
某集合之 WebDAV ACL 資料庫的記憶體表示法最大大小。0–2147.0483647.0。指定 —1 表示無限制。 |
更新間隔 |
WebDAV ACL 資料庫與磁碟同步的間隔。0.001 – 3600 秒。 指定 0 可停用快取 WebDAV ACL 清單。 |
DAV 特性資料庫 | |
最大大小 |
WebDAV 特性資料庫檔案的最大大小。0–2147.0483647.0。指定 —1 表示無限制。 |
更新間隔 |
WebDAV 特性資料庫與磁碟同步的間隔。0.001 – 3600 秒。 指定 0 可停用快取 WebDAV 特性。 |
若要在伺服器層級停用 WebDAV,請執行以下指令:
wadm> disable-webdav --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 |
請參閱 CLI 參考disable-webdav(1)。
在管理主控台上,按一下所選配置的 WebDAV 標籤,以編輯 WebDAV 認證資料庫設定。 下表提供了對頁面中各欄位的簡短說明:
表 10–2 WebDAV 認證資料庫特性
WebDAV 方法可以處理資源或集合的來源。HTTP 方法 (例如 GET 和 PUT) 會被 WebDAV 協定超載。因此,透過這些方法的請求可以是對資源來源的請求,也可以是對資源內容 (輸出) 的請求。
Microsoft 和許多其他 WebDAV 供應商解決了此問題,方法為隨請求傳送一個 Translate:f 標頭來通知伺服器所請求的是來源。為了能夠與常用的 WebDAV 用戶端 Microsoft WebFolders 互通,伺服器會將 Translate:f 標頭視為對資源來源的請求。為了配合不傳送 Translate:f 標頭的用戶端,伺服器定義了一個來源 URI。
對於啟用了 WebDAV 的集合,對 URI 的請求將擷取資源內容 (輸出),而對來源 URI 的請求將擷取資源來源。帶有 Translate:f 標頭的 URI 請求被視為是對來源 URI 的請求。
請註意,依預設,所有對資源來源的存取均被 dav-src ACL 拒絕,並在針對伺服器實例的 ACL 檔案中進行以下宣告:
deny (all) user = "anyone";
使用者可以透過在來源 URI 中增加存取權限來允許某個使用者存取該來源。
伺服器可讓伺服器管理員鎖定資源,以便串列化對該資源的存取。通過使用鎖定,正在存取某特定資源的使用者可以確定其他使用者不會修改同一資源。這樣就解決了多個使用者共用伺服器資源時可能發生的「遺失更新」問題。由伺服器維護的鎖定資料庫將追蹤用戶端發出和正在使用的鎖定記號。
伺服器支援 opaquelocktoken URI 方案,此方案的功能是在全部資源中始終保有唯一性。它使用了通用唯一識別碼 (UUID) 機制,如 ISO-1157.08 中所述。
伺服器可識別兩種類型的鎖定機制:
專用鎖定。
共用鎖定。
專用鎖定是僅授予單一使用者存取資源的鎖定。其他使用者要想存取同一資源,只能等到移除對該資源的專用鎖定之後。
有時對於資源鎖定而言,專用鎖定機制太死板,代價也很大。例如,當程式當機或鎖定擁有者遺忘解除鎖定資源時,便需要通過鎖定逾時或由管理員移除專用鎖定來解決問題。
共用鎖定允許多個使用者接收資源鎖定。這樣,任何具有適當存取權限的使用者都可以取得該鎖定。
使用共用鎖定時,鎖定擁有者之間可以使用任何其他通訊通道來協調工作。共用鎖定的目的是讓協作者瞭解誰還在使用同一資源。
您可以透過在 server.xml 檔案中配置 DAV 或 DAVCOLLECTION 物件的 minlocktimeout 屬性值來控制鎖定。minlocktimeout 屬性指定鎖定的最小使用期限 (以秒為單位)。此值表示鎖定被自動移除之前某元素被鎖定的時間。
這是一個可選屬性。如果將此值設定為 -1,則鎖定將永遠不會過期。如果將此值設定為 0,則可以使用在請求中指定的 Timeout 標頭來鎖定集合中的全部資源。
如果未指定 Timeout 標頭,則資源將被鎖定且永遠不會逾時。如果將請求中的 Timeout 標頭值設定為 Infinite,則同樣可將資源鎖定但永遠不會逾時。
如果對 WebDAV 資源的請求之 Timeout 標頭值大於或等於 server.xml 檔案中指定的 minlocktimeout 值,則資源的鎖定時間將是請求中指定的時間。
但是,若請求中的 Timeout 標頭值小於 server.xml 檔案中指定的 minlocktimeout 值,則會使用 server.xml 檔案中指定的 minlocktimeout 值鎖定資源。
下表說明伺服器處理鎖定請求的方式:
表 10–3 Sun Java System Web Server 處理鎖定請求的方式
使用 CLI
若要透過 CLI 設定鎖定到期時間,請執行以下指令:
wadm> expire-lock --user=admin --password-file=admin.pwd --host=serverhost--port=8989 --config=config1 --vs=config1 --collection-uri=/dav1 --lock-uri=/dav1/file.html --opaque-token=opaquelocktoken |
請參閱 CLI 參考expire-lock(1)。
在上述的範例中,opaque-token 可針對您要設定為過期的鎖定,指定其 ID。
若要透過 CLI 顯示現有鎖定,請執行以下指令:
wadm> list-locks --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs config1 --collection-uri=/dav1 |
請參閱 CLI 參考list-locks(1)。