Sun Java System Web Server 7.0 管理员指南

第 10 章 使用 WebDAV 实现 Web 发布

Sun Java System Web Server 7.0 支持 WebDAV(即基于 Web 的分布式制作和版本控制),这是一种基于 Web 的协作标准。WebDAV 是 HTTP/1.1 协议的扩展,它使客户机可以执行远程 Web 内容制作操作。

一个完整的 WebDAV 事务包括一台启用了 WebDAV 的服务器(例如 Sun Java System Web Server 7.0),用于处理对 WebDAV 资源的请求;还包括一台启用了 WebDAV 的客户机(例如 Adobe(R) GoLive(R) 或 Macromedia(R) DreamWeaver(R)),用于支持启用了 WebDAV 的 Web 发布请求。

在服务器端,需要启用并配置 Sun Java System Web Server 7.0 以便能够处理 WebDAV 请求。

由于以下原因,您可能希望对 WebDAV 进行配置:例如,要优化服务器性能、消除安全性风险或提供无冲突的远程制作。

为满足您的配置要求,您可以更改服务器对 WebDAV 资源保持的最小锁定时间、对集合的 PROPFIND 请求的深度以及请求主体所允许的 XML 内容的最大大小等设置。

可以在虚拟服务器级别为虚拟服务器下的所有集合配置默认 WebDAV 属性。此处配置的值对应于 server.xml 文件中的 DAV 元素。

也可以在集合级别配置 WebDAV 属性,这将覆盖为集合配置的任何虚拟服务器级别属性。在集合级别配置的属性值对应于 server.xml 文件中的 DAVCOLLECTION 元素。

关于 WebDAV

WebDAV 是对 HTTP/1.1 协议的扩展,添加了新的 HTTP 方法和标头,支持任意类型的 Web 资源制作,不仅支持 HTML 和 XML,还支持文本、图形、电子表格等格式。使用 WebDAV 可以完成的工作包括:

Sun Java System Web Server 7.0 中的 WebDAV 支持提供了以下功能:

常见 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 页面的源代码。在这种情况下,服务器将提供页面而不执行 Java 代码。客户机将收到未经处理的页面,与保存在磁盘中的页面完全一样。

这样,对源 URI 的请求也就成了请求资源的源代码。

集合。 WebDAV 集合是为 WebDAV 操作启用的一个或一组资源。集合包含一组称为成员 URI 的 URI,它们用来标识启用了 WebDAV 的成员资源。

成员 URI。集合中一组 URI 中的一个成员。

内部成员 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 请求返回的实体的长度,它是由服务器自动计算的。动态属性包括以下两类:

静态属性。不是由服务器强制实现的属性。服务器仅记录静态属性的值;客户机负责维护其一致性。

Sun Java System Web Server 支持以下动态属性:


注 –

Sun Java System Web Server 支持动态属性 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>


锁定。锁定资源功能提供了这样一种机制,即可以保证在一个用户编辑资源时,其他用户不能对该资源进行修改。锁定可以防止发生覆盖冲突,解决了“丢失更新”的问题。

Sun Java System Web Server 支持两种锁定类型:共享和互斥。

新的 HTTP 标头。WebDAV 扩展了 HTTP/1.1 协议。它定义了新的 HTTP 标头,客户机可以通过这些新标头传递 WebDAV 资源请求。这些标头为:

新的 HTTP 方法。WebDAV 引入了若干新的 HTTP 方法,用于指示启用了 WebDAV 的服务器如何处理请求。这些方法是对现有 HTTP 方法(例如 GETPUT DELETE)的补充,可用来执行 WebDAV 事务。下面简要介绍这些新的 HTTP 方法:

在实例级别启用 WebDAV

您可以使用 Administration Server 为整个服务器启用 WebDAV。执行此操作时,以下指令将添加到用于加载 WebDAV 插件的 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 集合

启用 WebDAV 集合

要启用 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 集合

要禁用 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 集合

要添加 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 集合

要列出所有 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 集合

要删除 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 属性

设置 WebDAV 属性

要在服务器级别设置 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 属性

要在服务器级别查看 WebDAV 属性,请执行以下命令:


wadm> get-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1

请参见 CLI 参考 get-webdav-prop(1)

设置 WebDAV 集合属性

要设置 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 集合属性

要查看 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 参数

下表中列出了一些通用 WebDAV 属性:

表 10–1 WebDAV 参数

参数

说明

锁定数据库路径

指定将在其中维护锁定数据库的目录。 

最小锁定超时

指定锁定的最小生命周期(以秒为单位)。值为 -1 表示锁定永不过期。此值表示自动删除锁定之前锁定某元素的时间。

最大请求大小

指定 XML 请求主体的最大大小。您应配置此值以防止受到可能的拒绝服务攻击。默认值是 8192 (8K)

最大扩展属性深度

指定 PROPFIND 请求的深度。0 只适用于指定的资源。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.01–3600 秒。指定 0 可以禁用高速缓存 WebDAV 属性。 

在服务器级别禁用 WebDAV

要在服务器级别禁用 WebDAV,请执行以下命令:


wadm> disable-webdav --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1

请参见 CLI 参考 disable-webdav(1)

管理 WebDAV 验证数据库

在管理控制台中,从选定的配置单击 WebDAV 选项卡以编辑 WebDAV 验证数据库设置。下表提供了此页面中每个字段的简短说明:

表 10–2 WebDAV 验证数据库属性

属性

说明

验证数据库

验证数据库使您可以选择服务器用于验证用户的数据库。

默认值为 keyfile

验证方法

  • 基本-使用 HTTP 基本方法从客户机获取验证信息。仅当为服务器启用了 SSL 后,才会通过网络对用户名和密码进行加密。

  • SSL-使用客户机证书来验证用户。要使用此方法,必须为服务器启用 SSL。启用加密后,您可以结合使用“基本”和 "SSL" 方法。

  • 摘要-使用一种验证机制,使得浏览器能够基于用户名和密码进行验证,而不必以明文形式发送用户名和密码。浏览器使用用户的密码和 Web Server 提供的某些信息,利用 MD5 算法来创建摘要值。请注意,要使用“摘要”,基础 auth-db 也必须支持摘要。这表示要么是使用摘要文件的文件 auth-db,要么是 LDAP auth-db(仅当安装了摘要验证插件)。

  • 其他-使用通过访问控制 API 创建的自定义方法。

验证提示文本

验证提示选项使您可以输入要在验证对话框中显示的消息文本。您可以使用此文本来说明用户需要输入的内容。基于不同的浏览器,用户大约会看到该提示的前 40 个字符。

Web 浏览器通常会高速缓存用户名和密码,并将它们与提示文本关联。当用户访问具有相同提示的服务器的文件和目录时,不必再次输入用户名和密码。如果您希望用户对特定文件和目录再次进行验证,只需更改该资源的 ACL 的提示。 

在启用了 WebDAV 的服务器上使用源 URI 和 Translate:f 标头

WebDAV 方法处理资源或集合的源。HTTP 方法(例如 GET 和 PUT)会被 WebDAV 协议重载,因此,使用这些方法的请求可以是对资源的源代码的请求,也可以是对资源的内容的请求。

Microsoft 和许多其他 WebDAV 供应商通过以下方法解决了此问题,即随请求发送一个 Translate:f 标头来告知服务器所请求的是源代码。为了可与流行的 WebDAV 客户机 Microsoft WebFolders 交互操作,Sun Java System Web Server7.0 将 Translate:f 标头识别为对资源的源代码的请求。针对不发送 Translate:f 标头的客户机,Sun Java System Web Server 定义了一个源 URI。

对于启用了 WebDAV 的集合,对 URI 的请求将检索资源的内容(输出),而对源 URI 的请求将检索资源的源代码。带有 Translate:f 标头的 URI 请求被看作是对源 URI 的请求。

请注意,默认情况下,所有对资源的源代码的访问均被 dav-src ACL 拒绝,特定于服务器实例的 ACL 文件中包含以下声明:

deny (all) user = "anyone";

用户可以通过添加对源 URI 的访问权限来允许另一个用户对源代码进行访问。

锁定和解除锁定资源

Sun Java System Web Server 允许服务器管理员锁定资源,以实现对该资源的有序访问。通过使用锁定,可以确保当一个用户正在访问某个特定的资源时,其他用户不会修改同一资源。这样就解决了多用户共享服务器上的资源时的“丢失更新”问题。由服务器维护的锁定数据库将跟踪客户机发出和正在使用的锁定令牌。

Sun Java System Web Server 支持 opaquelocktoken URI 方案,该方案被设计为在所有资源中始终是唯一的。它使用了通用唯一标识符 (Universal Unique Identifier, UUID) 机制,如 ISO-1157.08 中所述。

Sun Java System Web Server 可识别两种锁定机制:

互斥锁定

互斥锁定是仅对单个用户授予资源访问权限的锁定。只有删除对某个资源的互斥锁定后,其他用户才能访问该资源。

事实证明互斥锁定这种资源锁定机制有时太死板,代价也很大。例如,当程序崩溃或锁定所有者忘记解除锁定资源时,便需要通过锁定超时或管理员来删除互斥锁定。

共享锁定

共享锁定允许多个用户接收资源锁定。这样,任何具有适当访问权限的用户都可以获得锁定。

使用共享锁定时,锁定所有者可以使用任何其他通信通道来协调工作。共享锁定的目的是让协作者知道谁正在使用同一资源。

最小锁定超时

您可以通过在 server.xml 文件中配置 DAVDAVCOLLECTION 对象的 minlocktimeout 属性值来控制锁定。minlocktimeout 属性指定锁定的最小生命周期(秒)。此值表示锁定被自动删除之前某元素被锁定的时间。

这是一个可选属性。如果此值被设置为 -1,锁定将永远不会过期。如果将此值设置为 0,则可以使用请求中指定的 Timeout 标头锁定集合中的所有资源。

如果未指定 Timeout 标头,资源将被锁定且永远不会超时。如果将请求中的 Timeout 标头值设置为 Infinite,资源将同样被锁定且永远不会超时。

如果对 WebDAV 资源的请求的 Timeout 标头值等于或大于 server.xml 中指定的 minlocktimeout 值,则资源的锁定时间将是请求中指定的时间。

但是,如果请求中的 Timeout 标头值小于 server.xml 中指定的 minlocktimeout 值,则使用 server.xml 文件中指定的 minlocktimeout 值来锁定资源。

下表列出了 Sun Java System Web Server 处理锁定请求的方式:

表 10–3 Sun Java System Web Server 处理锁定请求的方式

如果请求中的 Timeout 标头被设置为: 

则资源: 

Infinite

被锁定且超时值被设置为 -1(无限) 

无 

被锁定且超时值被设置为 -1(无限) 

Second-xxx

  • 如果 xxx 等于或大于 server.xml 中设置的 minlocktimeout 值,则使用 xxx 值来锁定。

    或者

  • 如果 xxx 小于 server.xml 中设置的 minlocktimeout 值,则使用 server.xml 中指定的 minlocktimeout 值来锁定。


注 –

使用 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)