diff --git a/carddav.php b/carddav.php index e18e93e..7370274 100644 --- a/carddav.php +++ b/carddav.php @@ -106,14 +106,14 @@ if ($path === '/.well-known/carddav') { . '' . '' . CardDav::x(CardDav::HOME_PATH) . '' - . '', + . 'HTTP/1.1 200 OK', ]; foreach (CardDav::books($cdFamily, $cdMe) as $cdB) { $cdParts[] = '' . CardDav::x(CardDav::hrefOf($cdB)) . '' . '' . '' . '' . CardDav::x((string)$cdB['name']) . '' - . ''; + . 'HTTP/1.1 200 OK'; } header('Content-Type: application/xml; charset=utf-8'); http_response_code(207); @@ -213,7 +213,7 @@ if ($method === 'PROPFIND') { . '' . '' . CardDav::x(CardDav::PRINCIPAL_PATH) . '' - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -233,7 +233,7 @@ if ($method === 'PROPFIND') { . '' . CardDav::x(CardDav::HOME_PATH) . '' . $readOnlyPriv - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -259,7 +259,7 @@ if ($method === 'PROPFIND') { . '' . CardDav::x(CardDav::HOME_PATH) . '' . $readOnlyPriv - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -283,7 +283,7 @@ if ($method === 'PROPFIND') { . '' . CardDav::x(CardDav::HOME_PATH) . '' . $readOnlyPriv - . ''; + . 'HTTP/1.1 200 OK'; // 首次请求 `/carddav/`(不是 home 路径)时,另加一条指向 `/carddav/` 自身的响应, // 客户端会拿它当后续请求的 base。 if (!$isHome) { @@ -297,7 +297,7 @@ if ($method === 'PROPFIND') { . '' . '' . CardDav::x(CardDav::HOME_PATH) . '' - . ''; + . 'HTTP/1.1 200 OK'; } foreach (CardDav::books($familyId, $me) as $b) { $parts[] = '' . CardDav::x(CardDav::hrefOf($b)) . '' @@ -307,7 +307,7 @@ if ($method === 'PROPFIND') { . '' . CardDav::x((string)$b['description']) . '' . $readOnlyPriv - . ''; + . 'HTTP/1.1 200 OK'; } $emit($parts); exit; @@ -332,7 +332,7 @@ if ($method === 'PROPFIND') { . '' . 'text/vcard; charset=utf-8' . '' . strlen($card['body']) . '' - . ''; + . 'HTTP/1.1 200 OK'; } $emit($parts); exit; @@ -351,7 +351,7 @@ if ($method === 'PROPFIND') { . '' . '' . CardDav::x((string)($book['name'] ?? '家庭名册')) . '' . $readOnlyPriv - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -473,7 +473,7 @@ if ($method === 'REPORT') { . '' . '' . CardDav::x($card['etag']) . '' . $cardDataXml($card) - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -510,7 +510,7 @@ if ($method === 'REPORT') { . '' . '' . CardDav::x($card['etag']) . '' . $cardDataXml($card) - . ''; + . 'HTTP/1.1 200 OK'; } unset($bodyRaw); $emit($parts); diff --git a/dav.php b/dav.php index 9adafd5..c97d0d1 100644 --- a/dav.php +++ b/dav.php @@ -133,7 +133,7 @@ if ($path === '/.well-known/caldav') { . '' . '' . CalDav::x(CalDav::CARD_HOME_PATH) . '' - . '', + . 'HTTP/1.1 200 OK', ]; foreach (CalDav::books($wkFamily, $wkMe) as $wkC) { $wkParts[] = '' . CalDav::x(CalDav::hrefOf($wkC)) . '' @@ -141,7 +141,7 @@ if ($path === '/.well-known/caldav') { . '' . '' . CalDav::x('家书 · ' . (string)$wkC['name']) . '' . '' - . ''; + . 'HTTP/1.1 200 OK'; } CalDav::multis(); echo '' . "\n" @@ -336,7 +336,7 @@ if ($method === 'PROPFIND') { . '' . '' . CalDav::x(CalDav::CARD_HOME_PATH) . '' - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -362,7 +362,7 @@ if ($method === 'PROPFIND') { . '' . CalDav::x(CalDav::CARD_HOME_PATH) . '' . $readOnlyPriv - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -401,7 +401,7 @@ if ($method === 'PROPFIND') { . '' . CalDav::x(CalDav::CARD_HOME_PATH) . '' . $readOnlyPriv - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -432,7 +432,7 @@ if ($method === 'PROPFIND') { . '' . CalDav::x($ctag) . '' . '' . CalDav::x(CalDav::PRINCIPAL_PATH) . '' . $privOf($w) - . ''; + . 'HTTP/1.1 200 OK'; } // 🔴 v33:**始终**先输出 home 集合自身。 // RFC 4918 规定 PROPFIND 响应**必须包含被请求的资源本身**,Depth:1 也是。 @@ -448,7 +448,7 @@ if ($method === 'PROPFIND') { . '' . CalDav::x(CalDav::HOME_PATH) . '' . $readOnlyPriv - . ''; + . 'HTTP/1.1 200 OK'; // 首次请求 `/dav/`(bookId=0 且不是 home 路径)时,把发现链的三个答案一并给出: // 有些客户端在 /dav/ 上**同时**问 current-user-principal —— 少给一个它就又断了。 if (!$isHome) { @@ -462,7 +462,7 @@ if ($method === 'PROPFIND') { . '' . '' . CalDav::x(CalDav::HOME_PATH) . '' - . ''); + . 'HTTP/1.1 200 OK'); } $emit('xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav" ' . 'xmlns:x="http://apple.com/ns/ical/" ' @@ -489,7 +489,7 @@ if ($method === 'PROPFIND') { . '' . CalDav::x($etag) . '' . '' . 'text/calendar; charset=utf-8' - . ''; + . 'HTTP/1.1 200 OK'; } $emit('xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"', $parts); exit; @@ -515,7 +515,7 @@ if ($method === 'PROPFIND') { . '' . CalDav::x($ct) . '' . '' . CalDav::x(CalDav::PRINCIPAL_PATH) . '' . $privOf($cw) - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -650,7 +650,7 @@ if ($method === 'REPORT') { . '' . '' . CalDav::x($res['etag']) . '' . '' . CalDav::x($res['ics']) . '' - . '', + . 'HTTP/1.1 200 OK', ]); exit; } @@ -680,7 +680,7 @@ if ($method === 'REPORT') { . '' . '' . CalDav::x($res['etag']) . '' . '' . CalDav::x($res['ics']) . '' - . ''; + . 'HTTP/1.1 200 OK'; } $emit('xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"', $parts); exit;