【发布时间】:2015-12-17 20:15:00
【问题描述】:
我目前正在为我的日历应用程序开发 caldav 同步服务器层。我能够回答日历客户端请求的所有初始请求,并且目前坚持使用 REPORT 方法。
在日历上完成 PROPFIND 时,它会要求提供 CTag 和 Sync-Token。我确实通过提供 CTag 和 Sync-Token 来回答这个查询(目前为了模拟服务器,我动态生成这些值并为客户端提供服务)。
在接下来的查询中,请求的方法是日历上的REPORT,如下所示:
来自客户的请求:
REPORT URI /users/admin%40a.de/calendar/ PROTOCOL HTTP/1.1
----------------------------------------
Accept-encoding gzip, deflate
Accept */*
Connection keep-alive
Prefer return=minimal
Host **************
Brief t
User-agent Mac+OS+X/10.10.5 (14F27) CalendarAgent/316.1
Depth 1
Authorization Basic YWRtaW5AYS5kZTpwYXNz
Accept-language en-us
Content-type text/xml
Content-length 260
Request body: <?xml version="1.0" encoding="UTF-8"?>
<A:sync-collection xmlns:A="DAV:">
<A:sync-token>http://calserver.org/ns/sync-token/1</A:sync-token>
<A:sync-level>1</A:sync-level>
<A:prop>
<A:getcontenttype/>
<A:getetag/>
</A:prop>
</A:sync-collection>
来自服务器的响应:
响应标头
Content-type: text/calendar; charset=UTF-8
Connection: keep-alive
Date Thu, 17 Dec 2015 19:35:40 GMT
Transfer-encoding chunked
Http/1.1 207 Multi-Status
响应正文
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<D:multistatus xmlns:D=\"DAV:\" xmlns:C=\"urn:ietf:params:xml:ns:caldav\" xmlns:E=\"urn:ietf:params:xml:ns:carddav\">
<D:response>
<D:propstat>
<D:href>/calendar/2601ddd19c1001.ics</D:href>
<D:prop>
<D:getcontenttype>text/calendar</D:getcontenttype>
<D:getetag>"334411222s12"</D:getetag>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
现在我的问题是,在服务器响应中,我通过提供新的 ETag 值来回答 REPORT 方法已创建新事件,但客户端未请求数据??
我应该如何以及何时提供新活动的日历数据以及客户的请求是什么???
【问题讨论】: