我正在用SabreDAV实施CardDAV服务器,并在Apple Contacts(11.0)中对其进行测试。
我已经调试了通讯录应用发送的请求,我意识到了这一点: 当我创建新卡时,我花了10-15秒钟以上的时间,然后“通讯录”应用会先保存一张空卡:
PUT /addressbooks/username/default/fa8cf515-7dc3-4665-967e-3773dc6c050a.vcf
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//Mac OS X 10.13.6//EN
N:;;;
FN:
REV:2018-09-04T22:58:00Z
UID:fa8cf515-7dc3-4665-967e-3773dc6c050a
END:VCARD
SabreDAV创建卡并返回ETag。 之后,当我真正保存卡时,Contacts应用程序将整个卡再次发送到SabreDAV,但带有If-None-Match标题:
If-None-Match: *
因为带有uid的卡已经存在,所以SabreDAV返回412,这当然是正确的响应。
我该怎么办?不保存第一个空vcard?
如果我足够快地创建卡片,那么“通讯录”应用会在第一个请求中保存整个卡片,然后将其发送到If-None-Match标头中的etag,一切正常!