Google Carddav服务器在初始同步请求期间返回400

时间:2017-10-18 07:30:31

标签: carddav

在与Google的CardDav服务器进行初始同步时,我正在使用sync-collection方法执行REPORT请求。在此请求中,我从初始同步开始传递空的sync-token。 这是根据RFC 6578(https://tools.ietf.org/html/rfc6578#section-3.8)。

请求正文如下所示:

<?xml version="1.0" ?>
<D:sync-collection xmlns:D="DAV:">
<D:sync-token/>
<D:prop>
    <D:getetag/>
</D:prop>
</D:sync-collection>

我期待与所有联系人的etag进行多状态回复。 但是,谷歌正在返回HTTP错误400。

如果我做错了什么可以吗?

1 个答案:

答案 0 :(得分:0)

根据https://tools.ietf.org/html/rfc6578#section-6.1

,您的请求缺少同步级元素
   <!ELEMENT sync-collection (sync-token, sync-level, limit?, prop)>

Google API并不完全清楚它们是否支持空同步令牌。

  

初始同步后,客户端应用程序必须切换到此操作模式。

  

客户端程序使用通讯簿上的sync-token PROPFIND请求来获取表示其当前状态的同步令牌。客户端应用程序必须存储此值并发出定期同步收集REPORT请求,以确定自上次发出的同步令牌以来的更改。颁发的令牌有效期为29天,REPORT响应将包含一个新的同步令牌。

所以他们很有可能因为这个原因拒绝了请求。 如果是这种情况,可以使用深度执行PROPFIND:1要求同步令牌属性以及getetag,然后根据检索到的同步令牌属性执行同步请求。