jsDAV ライブラリ (SabreDAV ライブラリの JavaScript フォーク) を使用して、独自の CalDAV サーバーを構築しています。これで、直接カレンダー URL でカレンダーを提供できるようになりました (認証バックエンドとカレンダー バックエンドの両方のバックエンドをセットアップしました)。
iOS/OS X アプリで自動サービス検出を使用できるようにしたいと考えています。したがって、Mac または iPad で CalDAV アカウントをセットアップする場合は、サーバー名、ユーザー名/パスワードを入力するだけで、URL などは入力しないでください。
そうするために、クライアントをCalDAVサーバーのルートにリダイレクトする必要がある/.well-known/caldav
アドレスを提供しています
したがって、DAV サーバーのルートが配置されている場合は、/dav/
302 から/dav/
url に移動し/.well-known/caldav
ます。
次に、サーバーの観点から見た典型的な iOS 自動検出セッションを次に示します。HTTPS でサーバーにアクセスできます (すべての証明書が有効で、自己署名証明書はありません)。HTTP は無効です。
PROPFIND /.well-known/caldav HTTP/1.1 302 39 "-" "iOS/7.1.1 (11D201) accountsd/1.0"
PROPFIND /dav/ HTTP/1.1 401 - "-" "iOS/7.1.1 (11D201) accountsd/1.0"
PROPFIND /dav/ HTTP/1.1" 207 - "-" "iOS/7.1.1 (11D201) accountsd/1.0"
最初の要求は、前述のサービスの自動検出です。サーバーは 302 で /dav/ に応答します。
/dav/
2 行目は、認証ヘッダーなしの最初の要求です。'WWW-Authenticate': 'Basic realm="jsDAV"
ヘッダーで返信します。
3 行目は正しく認証された DAV リクエストです (認証バックエンド ログと jsDAV デバッグ ログで確認できます)。これが私がここに持っているものです:
<?xml version="1.0" encoding="UTF-8"?>
<A:propfind xmlns:A="DAV:">
<A:prop>
<A:current-user-principal/>
<A:principal-URL/>
<A:resourcetype/>
</A:prop>
</A:propfind>
そして、これが私が送り返したものです:
<?xml version="1.0" encoding="utf-8"?>
<d:multistatus
xmlns:d="DAV:"
xmlns:a="http://ajax.org/2005/aml"
xmlns:cal="urn:ietf:params:xml:ns:caldav"
xmlns:cs="http://calendarserver.org/ns/"
xmlns:dav="urn:DAV">
<d:response>
<d:href>/dav/</d:href>
<d:propstat>
<d:prop>
<d:current-user-principal>
<d:href>/dav/principals/me/</d:href>
</d:current-user-principal>
<d:resourcetype>
<d:collection/>
</d:resourcetype>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
</d:multistatus>
この後(私の観点からは成功)、交換iOSは、サーバーへの安全な接続を確立できないことを通知し、安全でない接続を試すことを提案しました。
ここで何が問題なのですか?iOS がサーバーが壊れていると判断するのはなぜですか?