Http CalDAV客户端';s报告方法不请求新事件数据

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

我目前正在为我的日历应用程序开发caldav同步服务器层。我能够回答calendar客户端最初要求的所有问题,目前仍坚持使用REPORT方法

当PROPFIND在日历上完成时,它会请求CTag和同步令牌。我通过提供CTag和Sync令牌来回答这个问题(目前,为了模拟服务器,我动态生成这些值并为客户机服务)

在下一个查询中,请求的方法是日历上的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>
响应主体

<?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


内容类型: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>