标头
支持下面的标头以用于 DAV/HTTP:DAV 和 Depth。新的 RVP 标头包括 RVP-Notifications-Version、Call-Back、Subscription-Id、Subscription-Lifetime 和 Notification-Type。
现有的 DAV/HTTP 标头
RVP 实现可以忽略所有 DAV 特定的标头,除非另有说明。
DAV 标头
因为此协议的当前版本只是部分符合 DAV,所以服务器从来不返回此标头,而且在请求中忽略它。
Depth 标头
在 PROPFIND 方法中仅支持深度值为零的此标头,在该方法中它是必需的。
新的 RVP 标头
RVP-Notifications-Version
此标头提供通知协议的版本号。每个请求和响应都必须包括此标头。
Call-Back
此标头取自 GENA,在 SUBSCRIBE 方法中使用;它给出订阅通知的异步 NOTIFY 回调的 URL。
Subscription-Id
此标头取自 GENA,在 SUBSCRIBE 请求/响应以及 NOTIFY 和 UNSUBSCRIBE 请求中使用。它给出订阅的唯一标识符。
Subscription-Lifetime
此标头取自 GENA,在 SUBSCRIBE 方法中使用。如果租用了订阅,它表明被请求的(在请求中)订阅和实际的(在响应中)超时需要更多信息。
Notification-Type
此标头取自 GENA,在 SUBSCRIBE 方法中使用。它表明所需的通知类型(在 GENA 框架内)。
值可以是 update/propchange 或 pragma/notify,并且可以扩展为其它值。
RVP-Ack-Type
此标头确定 NOTIFY 消息的发件人何时对完成发送和要求确认满意。它可以具有 SingleHop、DeepOr 或 DeepAnd 值。
RVP-Hop-Count
此标头用来表明为生成此请求出现了多少次转发,包括 NOTIFY 消息的来源(最初设置为 1)。
RVP-From-Principal
此标头表明此方法的来源。它通常是发件人的逻辑 URL。
返回码
RVP 使用几种现有的 HTTP 返回码,以及来自 DAV 的几种返回码。下面是通常使用的返回码:
200 Successful
此代码表明已经成功执行了请求。
207 MultiStatus
作为对 PROPPATCH 或 PROPFIND 请求的响应,正常情况下将接收到此代码。此请求具有一个文本 /html HTTP 主体,该主体有一个称为 multistatus 的单一 XML 元素。multistatus 元素具有一组称为响应的 XML 元素,其中包含 200、300、400 和 500 系列的状态代码,这些代码是在调用方法期间生成的。
302 Object Moved
此代码表明所请求的节点不是由服务器维护的。响应包括该节点的新 URL。作为对向路由器发出的请求的响应,通常会接收到此类型的响应。
401 Access Denied
此代码表明某个节点已经拒绝了访问。当 PRESENCE SERVICE 试图访问受保护的节点时,它用此代码作为响应。响应标头包含可用授权方案的详细信息。
412 Precondition Failed
此代码表明无法将请求应用于所请求的节点。其用法的一个示例是,当一个实体试图将 INSTANT MESSAGE 发送给一个不再可用的 PRINCIPAL 时。
500 Internal Server Error
此代码表明会话中缺少 PRINCIPAL。例如,当一个 PRINCIPAL 离开与多个 PRINCIPALS 的讨论,且它的 INSTANT INBOX 接收到会话通知时,将使用此返回码。然后,INSTANT MESSAGE 的发件人就能够指明该 PRINCIPAL 已经离开了对话。
XML 文档类型定义
以下是在 DAV 中使用的元素:
set
prop
timeout
displayname
subscription
subscription-id
href
subscriptions
multistatus
response
propstat
propertyupdate
RVP 元素
下表说明由 RVP 提供的元素。
元素
定义
父级
作用
State
DAV:
表明节点的当前状态信息
Leased-value
表明“当前租用值”状态
Default-value
表明节点的当前缺省状态(当前为 " " , , 或 之一)Value表明节点的当前状态(当前为 " " 或 之一)Online | 表明“在线”状态Offline | 表明“离线”状态Away | 表明“离开”状态Busy | 表明“忙”状态Back-soon | 表明“很快返回”状态On-phone | 表明“有电话”状态At-lunch | 表明“吃午饭”状态View-id为对节点的更新提供唯一的标识符Principal包含有关 PRINCIPAL 的详细信息Rvp-principal详细说明 PRINCIPAL 的逻辑 URLEmailDAV:包含有关 PRINCIPAL 的电子邮件地址的详细信息Mobile-stateDAV:确定 PRINCIPAL 的移动(即手机)状态是在线Mobile-descriptionDAV:说明 PRINCIPAL 的移动(即手机)号码NotificationNone表明发生了一个即时消息或对 PRINCIPAL 状态的更新Propnotification表明 PRINCIPAL 的状态发生了变化Message 表明发送或接收了一个即时信息Notification-from | 表明通知或消息的来源Notification-to | 表明通知或消息要发送给何人Msgbody包含需要发送的用 MIME 编码的消息Contact | 详细说明如何与 PRINCIPAL 联系Description说明联系人的情况Mime-data包含要发送或接收的实际 INSTANT MESSAGE
MIME 有效负载
在通知的 mime 数据内可以传递三种类型的有效负载。以下各节包含这些有效负载中每一种的详细信息。
即时消息
此有效负载是最常见的类型。它通常用来在两个 PRINCIPALS 之间发送一些文本。mime 数据如下所示:
键入消息
此有效负载用来表明 PRINCIPAL 正在键入。在 Exchange 2000 Server 中,这些通知每隔 4 秒发送一次。
应用程序邀请
在出现启动应用程序的请求时,使用此有效负载。
参考资料
以下这些文章可以在 Internet 工程工作组(英文)的 Web 站点上找到:
"A Model for Presence and Instant Messaging," Day, M., J. Rosenberg, and H. Sugano, RFC 2778 [MODEL]。
HTTP Extensions for Distributed Authoring, Goland Y., E. Whitehead, A. Faizi, S. Carter and D. Jensen, RFC 2518 [WEBDAV]。
Hypertext Transfer Protocol HTTP/1.1, Fielding, R. J. Gettys, J. Mogul, H. Frystyk, and T. Berners-Lee, RFC 2068 [HTTP]。
"Instant Messaging/Presence Protocol Requirements," Day, M., S. Aggarwal, G. Mohr, and J. Vincent RFC 2779, [IMPP-REQTS]。