Http CalDAV客户端';s报告方法不请求新事件数据
我目前正在为我的日历应用程序开发caldav同步服务器层。我能够回答calendar客户端最初要求的所有问题,目前仍坚持使用REPORT方法 当PROPFIND在日历上完成时,它会请求CTag和同步令牌。我通过提供CTag和Sync令牌来回答这个问题(目前,为了模拟服务器,我动态生成这些值并为客户机服务) 在下一个查询中,请求的方法是日历上的REPORT,如下所示: 来自客户端的请求:Http CalDAV客户端';s报告方法不请求新事件数据,http,webdav,caldav,Http,Webdav,Caldav,我目前正在为我的日历应用程序开发caldav同步服务器层。我能够回答calendar客户端最初要求的所有问题,目前仍坚持使用REPORT方法 当PROPFIND在日历上完成时,它会请求CTag和同步令牌。我通过提供CTag和Sync令牌来回答这个问题(目前,为了模拟服务器,我动态生成这些值并为客户机服务) 在下一个查询中,请求的方法是日历上的REPORT,如下所示: 来自客户端的请求: REPORT URI /users/admin%40a.de/calendar/ PROTOCOL HTTP
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>
响应主体
<?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>
/日历/2601ddd19c1001.ics
文本/日历
“3344112S12”
HTTP/1.1200ok
现在我的问题是,在服务器响应中,我回答了报告方法,即通过提供新的ETag值创建了一个新事件,但客户端没有请求数据
我应该如何以及何时提供新活动的日历数据,以及客户的请求是什么?- 内容类型不应为
,而应为text/xml
李>text/calendar
- etag需要用双引号括起来
- 我很确定在uri中使用
的方式是个坏主意。如果要对空格进行编码,请使用+
,但最好完全避免任何特殊编码%20
- 对同步收集报告的响应也必须在响应正文中包含当前同步令牌。看
内容类型:text/xml;charset=UTF-8感谢您的回复。是的,我将内容类型更改为icalendar,并将etag括在双引号内。但是没有运气!。加号“+”不在etag中,只是代码的一部分,用于动态获取新值以附加etag值(用于测试目的)。从问题中删除这些加号以避免歧义。您好,很抱歉我错了。内容类型应该是
text/calendar
而不是text/icalendar
,我还为我的答案添加了另一个要点。谢谢。是的,更新contenttype并添加当前同步令牌值。但是下一个问题“日历数据”仍然没有被问到。@Hoysala注意到HTTP响应本身的内容类型应该是application/xml(text/xml也是可以接受的),而D:getcontenttype值应该是“text/calendar”,正如Evert所指出的。
<?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>