5月阅读周·HTTP权威指南:发布系统之集合与名字空间管理篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
发布系统
集合与名字空间管理
集合是指对预定义的层次结构中的资源进行的逻辑或物理上的分组。集合的一个典型的例子就是目录。就像文件系统中的目录一样,集合作为其他资源(也包括其他集合,和文件系统中的目录一样)的容器使用。WebDAV使用了XML的名字空间机制。与传统的名字空间不同,XML名字空间的分区在阻止所有名字空间冲突的同时,还允许进行精确的结构控制。WebDAV提供了5种方法对名字空间进行操作:DELETE、MKCOL、COPY、MOVE以及PROPFIND。
MKCOL方法
MKCOL方法允许客户端在服务器上指定的URL处创建集合。乍一看,仅仅为了创建集合而定义一个新方法好像有点儿多余。在PUT或POST方法之上加以修饰看起来就是个完美的替代方案。WebDAV协议的设计者确实考虑过这些替代方案,但最终还是选择定义一个新方法。决策背后的一些理由如下所述。
· 为了使用PUT或POST来创建集合,客户端要随请求发送一些额外的“语义黏胶”。这当然是可以做到的,但定义这种特别的东西总是乏味且易错的。
· 大多数访问控制机制都是建立在方法类型之上的——只有少数能在库中创建和删除资源。如果给其他方法过多的功能,这些访问控制机制就无法运作了。
下面是请求的例子:
MKCOL /publishing HTTP/1.1
Host: minstar
Content-Length: 0
Connection: Keep-Alive
其响应可能是:
HTTP/1.1201 Created
Server: Microsoft-IIS/5.0
Date: Fri, 10 May 2002 23:20:36 GMT
Location: http://minstar/publishing/
Content-Length: 0
我们再考察下面几种异常情况。
· 假设集合已经存在。如果发出MKCOL /colA请求而colA已存在(也就是说有名字空间冲突),请求会失败,状态码是405 Method Not Allowed。
· 如果没有写权限,MKCOL请求会得到403 Forbidden失败状态码。
· 如果发出MKCOL /colA/colB这样的请求而colA不存在,请求会失败,状态码是409 Conflict。
创建了文件或集合之后,可以用DELETE方法来删除。
DELETE方法
WebDAV扩展了它的语义以覆盖集合。如果需要删除一个目录,就要提供Depth首部。如果没有指定Depth首部,DELETE方法就假定Depth首部设定为无穷大——也就是说,该目录中的所有文件和子目录都会被删除。响应中也有Content-Location首部,其值就是刚被删除的集合。下面是一个请求的示例:
DELETE /publishing HTTP/1.0
Host: minstar
其响应的示例如下:
HTTP/1.1200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 14 May 2002 16:41:44 GMT
Content-Location: http://minstar/publishing/
Content-Type: text/xml
Content-Length: 0
删除集合时,总是有可能发生其中某个文件被其他人锁定而无法删除的情况。在这种情况下,集合自身也无法删除,服务器会以207 Multi-Status状态码响应。请求示例如下:
DELETE /publishing HTTP/1.0
Host: minstar
其响应的示例如下:
HTTP/1.1207 Multi-Status
Server: Microsoft-IIS/5.0
Content-Location: http://minstar/publishing/
..............
<? xml version="1.0"? >
<a:multistatus xmlns:a="DAV:">
<a:response>
<a:href>http://minstar/index3/ch-publish.fm</a:href>
<a:status> HTTP/1.1423 Locked </a:status>
</a:response>
</a:multistatus>
在这次事务中,XML元素<status>中含有状态码423 Locked,表明资源ch-publish.fm被别的用户锁定了。
总结
怎样创建Web页面并放到Web服务器上去呢?在Web发展的“蛮荒”时代(比如1995年),可能要在文本编辑器中手工拼凑HTML,用FTP手动把内容上传到Web服务器。这个过程很痛苦,很难与同事配合,也不是特别安全。如今的发布工具使得创建、发布以及管理Web内容方便了许多。今天,用户可以交互式地编辑Web内容,在屏幕上看到它实际呈现的样子,轻轻点击一下就可以把内容发布到服务器,还能得到所有文件变化的通知。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)