3

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 は無効です。

  1. PROPFIND /.well-known/caldav HTTP/1.1 302 39 "-" "iOS/7.1.1 (11D201) accountsd/1.0"
  2. PROPFIND /dav/ HTTP/1.1 401 - "-" "iOS/7.1.1 (11D201) accountsd/1.0"
  3. 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 がサーバーが壊れていると判断するのはなぜですか?

4

1 に答える 1

2

このドキュメントを見つけました: http://wiki.wocommunity.org/display/~probert/CalDAV+and+CardDAV+handshake

私の質問に対する答えは次のとおりです: OPTIONS リクエストがフロントエンド サーバーによってブロックされました。そのため、握手は完全には完了していません。

于 2014-05-28T19:02:33.140 に答える