Каков ваш опыт внедрения / использования WebDAV? - PullRequest
6 голосов
/ 11 декабря 2008

В текущем проекте я думал о реализации WebDAV для представления виртуального хранилища файлов, к которому могут обращаться клиенты. До сих пор я проводил только исследования в Google, но, похоже, я смогу реализовать только два метода:

GET, PROPFIND

Я думаю, что это здорово. Мне было просто любопытно. Если бы я хотел осуществить загрузку файла через:

PUT

Я не реализовал это, но это кажется достаточно простым. Меня беспокоит только то, будет ли отображаться индикатор прогресса для пользователя, если он использует стандартный Vista Explorer или OSX Finder.

Наверное, я ищу истории от людей, знакомых с WebDAV.

Ответы [ 8 ]

7 голосов
/ 23 сентября 2010

Я реализовал большую часть протокола WebDAV примерно за день работы: http://github.com/nfarina/simpledav

Я написал его на Python для запуска на Google App Engine, и я ожидаю, что любой другой язык будет похожим усилием. В целом, это около двух страниц кода.

Я реализовал следующие методы: OPTIONS, PROPFIND, MKCOL, DELETE, MOVE, PUT, GET. До сих пор я тестировал Transmit и Cyberduck, и оба отлично с ним работают.

Надеюсь, это может послужить руководством для следующего человека, заинтересованного во внедрении сервера WebDAV. Это не сложный протокол, он очень плотный с абстрагированным языком, таким как «глубина», «коллекции» и тому подобное.

Вот спецификация: http://www.webdav.org/specs/rfc4918.html

Но лучший способ понять протокол - это наблюдать за клиентом, взаимодействующим с работающим сервером. Я использовал Transmit для подключения к серверу Box.net WebDAV и отслеживал трафик с помощью Charles Proxy.

7 голосов
/ 17 января 2009

Для многих клиентов WebDAV и даже для доступа только для чтения вам также потребуется поддержка OPTIONS. Если вы хотите поддерживать загрузку, очевидно, что требуется PUT, а некоторым клиентам (MacOS X?) Потребуется поддержка блокировки.

(кстати, RFC 4918 является авторским источником информации).

5 голосов
/ 23 апреля 2009

Немного опоздал на вечеринку, но я реализовал большую часть протокола webdav, и я могу с уверенностью сказать, что вам потребуется реализовать большую часть протокола.

Для OS / X вам понадобится поддержка WebDAV класса 2, которая включает в себя LOCK и UNLOCK (мне было особенно трудно полностью реализовать заголовок http If:, но для Finder вам понадобится только немного этого. )

Вот некоторые из моих личных находок:

http://sabre.io/dav/clients/windows/ http://sabre.io/dav/clients/finder/

Надеюсь, это поможет

2 голосов
/ 10 февраля 2009

В нашем веб-продукте есть сервлет webDAV.

Я нашел Apache Jackrabbit хорошей помощью для его реализации. однако webDav является серьезной P.I.T.A для клиентской поддержки.

многие клиентские реализации сильно различаются по своему поведению, и вам, скорее всего, придется поддерживать несколько различных типов ошибочных реализаций.

некоторые примеры: MS Vista поддерживает только аутентификацию по SSL

большинство клиентов webDAV на базе Windows предполагают, что ваш webdav-сервер / let является сервером sharepoint и будет действовать соответствующим образом (следовательно, не в соответствии с протоколом webDAV)

Одним из примеров этого является то, что вам НЕОБХОДИМО разрешить и не авторизованный запрос LOCK для корня вашего сервера (т.е. yourdomain.com/ not yourdomain.com/where/webdav/should/live), иначе вы не сможете получить запись Доступ в MS Windows. (это серьезный P.I.T.A на компьютере кота, где ваши вещи обычно живут на server.com/servlets/paths/thelocation)

большинство (все?) Версии MS Office по-разному реагируют на ссылки на webdav.

Полагаю, моя точка зрения заключается в том, что интеграция поддержки webdav в существующий продукт может быть намного сложнее, чем вы ожидаете. и, если возможно, я бы посоветовал использовать (полу) -стандартный сервер webDAV, такой как jackrabbit webdavServer или apache mod_webdav

2 голосов
/ 11 декабря 2008

Мы используем WebDAV для внутренних целей, чтобы обеспечить просмотр некоторых общих файловых папок для клиентов вне нашего брандмауэра. Для этого мы используем IIS6.

По сути, это сводится к созданию виртуального каталога в IIS, который сопоставляется с каждой сетевой файловой системой, которую вы хотите сделать доступной через WebDAV. Настройте его с помощью содержимого «Общая папка, расположенная на другом компьютере» - используйте UNC-путь к общей папке для значения «Сетевой каталог». Мы включаем все параметры, кроме индексации этого ресурса. Отключить все страницы содержимого по умолчанию. Включите встроенную аутентификацию Windows (наша также настроена с использованием SSL). У меня есть root, настроенный для запрета доступа анонимным пользователям и разрешения доступа любому авторизованному пользователю. У нас также есть подстановочный MIME-сопоставление (. * Для application / octet-stream). Включите расширение веб-службы WebDAV в IIS. Вам также необходимо настроить веб-сервер для делегирования разрешений всем файловым серверам, к которым вы можете обращаться, чтобы он мог передавать учетные данные пользователя.

Если у вас есть клиенты Macintosh, вам также может понадобиться фильтр ISAPI, который отображает от 401 до 403 ошибок для клиентов Darwin. Microsoft и Apple не согласны с тем, как справиться с ситуацией, когда у вас нет разрешения на запись в каталог. Apple продолжает повторную отправку учетных данных при ошибке 401 (доступ запрещен), переводя ее в ошибку 403 (запрещено), чтобы это не происходило. По умолчанию Apple любит записывать «точечные» файлы в каждый каталог, к которому она обращается. Перемещение по каталогам, где у вас нет прав на запись, приведет к сбою в Finder, если у вас нет фильтра. У меня есть исходный код для этого, если это необходимо.

Это все с моей головы. Возможно (вероятно?), Что я, возможно, что-то пропустил. Не стесняйтесь обращаться ко мне через контактную информацию на моем веб-сайте, если у вас есть проблемы.

2 голосов
/ 11 декабря 2008

Если вы запускаете Apache Jackrabbit, скажем, под Tomcat, его можно настроить для предоставления WebDAV и хранения загруженных файлов. Возможно, это будет полезной моделью или даже достаточно хорошей заменой запланированной реализации.

Поддержка Apache Jackrabbit для WebDAV

Также вам может потребоваться информация о клиенте BitKinex (бесплатная 30-дневная пробная версия), который, как я обнаружил, является полезным инструментом для тестирования сервера WebDAV.

Домашняя страница BitKinex

1 голос
/ 12 декабря 2008

Я обнаружил, что поддержка OS X Finder WebDAV очень привередлива. Чтобы получить поддержку чтения-записи, вы должны реализовать LOCK в дополнение к другим битам.

Я написал интерфейс WebDAV для базы данных Postres, где модули Python хранятся в базе данных в иерархической структуре, похожей на папку. Доступ к нему с помощью cadaver работал нормально, и IIRC также работал с Windows GUI-браузером, но Finder отказывался монтировать общий ресурс как что-либо кроме чтения.

Итак, я не знаю, даст ли if индикатор выполнения. Файлы, с которыми я имел дело, были достаточно маленькими, поэтому чтение / копирование с них происходило практически мгновенно. Я думаю, что копия большого файла с использованием Finder, вероятно, даст индикатор выполнения - он подходит для любого другого типа подключенного общего ресурса.

0 голосов
/ 14 июля 2009

Вот еще один проект с открытым исходным кодом для WSGI WebDAV http://code.google.com/p/wsgidav/ где я взял проект PyFileServer.

...