Каков ваш опыт реализации / использования WebDAV?

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

GET, PROPFIND

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

PUT

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

Я думаю, что я ищу некоторые истории от людей, имеющих опыт работы с WebDAV.

8 ответов


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

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


я реализовал большую часть протокола 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 ' s WebDAV сервер и мониторинг трафик с Charles Proxy.


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

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

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

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

надеюсь, что это помогает


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

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

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

BitKinex Дома Страница


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

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

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

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


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

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

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

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

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

одним из примеров этого является то, что вам нужно разрешить и неавторизованный запрос блокировки в корне вашего сервера (т. е. yourdomain.com/ нет yourdomain.com/where/webdav/should/live) иначе вы не сможете получить доступ для записи в MS windows. (это серьезный P. I. T. A на машине tomcat, где обычно живут ваши вещи server.com/servlets/paths/thelocation)

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

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


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

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

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


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