5月阅读周·HTTP权威指南:发布系统之WebDAV与协作写作篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
发布系统
怎样创建Web页面并放到Web服务器上去呢?在Web发展的“蛮荒”时代(比如1995年),可能要在文本编辑器中手工拼凑HTML,用FTP手动把内容上传到Web服务器。这个过程很痛苦,很难与同事配合,也不是特别安全。如今的发布工具使得创建、发布以及管理Web内容方便了许多。今天,用户可以交互式地编辑Web内容,在屏幕上看到它实际呈现的样子,轻轻点击一下就可以把内容发布到服务器,还能得到所有文件变化的通知。
WebDAV与协作写作
WebDAV(Web Distributed Authoring and Versioning,分布式写作与版本管理)为Web发布增添了新的内容——协作。当前,最常见的协作实践(电子邮件或分布式文件共享)显然没有什么技术含量。这种实践很不方便还容易出错,而且几乎没有过程控制。请考虑运行一个为多国用户服务的汽车制造商的多语种网站。很容易看出,它非常需要安全可靠的带有发布原语和协作原语(比如锁定和版本管理等)的健壮系统。
WebDAV的方法
WebDAV定义了一些新的HTTP方法并修改了其他一些HTTP方法的操作范围。WebDAV新增的方法如下所述。
- PROPFIND获取资源的属性。
- PROPPATCH在一个或多个资源上设定一个或多个属性。
- MKCOL创建集合。
- COPY从指定的源端把资源或者资源集合复制到指定的目的地。目的地可以在另一台机器上。
- MOVE从指定的源端把资源或者资源集合移动到指定的目的地。目的地可以在另一台机器上。
- LOCK锁定一个或多个资源。
- UNLOCK把先前锁定的资源解锁。WebDAV修改的HTTP方法有DELETE、PUT以及OPTIONS。
WebDAV与XML
WebDAV的方法通常都需要在请求和响应中关联大量的信息。HTTP通常用报文首部来交换这类信息。然而,只在首部传输必要的信息已经暴露了一些局限性,包括难以有选择地对请求中的多个资源应用首部信息、不利于表示层次结构等。
WebDAV借助了XML解决这个问题,它是一种元标记语言,提供了描述结构化数据的格式。XML为WebDAV提供了以下解决方案。
- 对那些描述数据处理方式的指令进行格式化的方法。
- 在服务器上对复杂的响应进行格式化的方法。
- 交换与所处理的集合和资源有关的定制信息的方法。· 承载数据自身的灵活工具。
- 对大多数国际化问题的健壮解决方案。
习惯上会把XML文档里引用的方案定义保存在一个DTD(Document Type Definition,文档类型定义)文件中。因此,试图解释XML文档时,可以根据其中的DOCTYPE定义项得到和这份XML文档相关的DTD文件名。
WebDAV定义了一个显式的XML名字空间——“DAV:”。简单地说,XML的名字空间就是元素或属性的名字的集合。名字空间限定了嵌入的名字在域内必须是唯一的,这样就可以避免名字冲突。
WebDAV规范(也就是RFC 2518),定义了完整的XML方案。预定义的方案允许解析软件不必读取DTD文件,而是根据预定义的XML方案来解释。
WebDAV首部集
WebDAV的确引入了一些HTTP首部来增强新方法的功能。新的首部如下所示。
- DAV:用于了解服务器的WebDAV能力。WebDAV支持的所有资源在响应OPTIONS请求时都要含有此首部。
DAV = "DAV" ":" "1" [", " "2"] [", " 1#extend]
- Depth:这是一个关键元素,用于把WebDAV扩展到支持含有多级层次关系的资源组。
Depth = "Depth" ":" ("0" | "1" | "infinity")
我们来看一个简单的例子。假设有个目录DIR A,其中有文件file 1.html和file 2.html。如果某方法设置了Depth:0,此方法就只作用到目录DIR A自身;如果设置了Depth:1,就作用到目录DIR A及其包含的文件file 1.html和file 2.html。Depth首部对WebDAV定义的许多方法进行了修饰。用到Depth首部的方法有:LOCK、COPY以及MOVE。
- Destination:定义这个首部是用来辅助COPY或MOVE方法标识目标URI的。
Destination定义这个首部是用来辅助COPY或MOVE方法标识目标URI的。
If:定义的唯一一个状态令牌是锁定令牌。If首部定义了一组条件,如果这些条件都取值为非,请求就失败。类似COPY和PUT等方法可以在If首部中指定前置条件,使其有条件地适用。在实践中,最常见的需要满足的前置条件是先获得锁。
If ="If"":" (1*No-tag-list | 1*Tagged-list)
No-tag-list = List
Tagged-list = Resource 1*List
Resource = Coded-URL
List = "(" 1*(["Not"](State-token | "[" entity-tag "]")) ")"
State-token = Coded-URL
Coded-URL = "<" absoluteURI ">"
- Lock-Token:UNLOCK方法需要用这个首部指定要删除的锁。LOCK方法的响应中也有Lock-Token首部,载有关于锁定令牌的必须信息。
Lock-Token ="Lock-Token"":"Coded-URL
- Overwrite:用于COPY和MOVE方法,指定是否要覆盖目标。
Overwrite ="Overwrite"":" ("T" |"F")
- Timeout:客户端用这个请求首部指定要求锁定的超时值。
TimeOut = "Timeout" ":" 1#TimeType
TimeType = ("Second-" DAVTimeOutVal | "Infinite" | Other)
DAVTimeOutVal = 1*digit
Other = "Extend" field-value
总结
WebDAV(作为RFC 2518发表)专注于对HTTP进行扩展,以提供协作写作的适宜平台。目前是在IETF的组织下,得到了许多厂商的支持,包括Adobe、Apple、IBM、Microsoft、Netscape、Novell、Oracle以及Xerox。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)