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


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

GET, PROPFIND

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

PUT

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

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

8 6

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

Но лучший способ понять протокол-наблюдать, как клиент взаимодействует с работающим сервером. Я использовал передачу для подключения к 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-путь к общему ресурсу для значения сетевого каталога. Мы включаем все опции, кроме индексирования этого ресурса. Отключите все страницы содержимого по умолчанию. Включите встроенную аутентификацию Windows (Наша также настроена с использованием SSL). У меня есть корень, настроенный для запрета доступа к анонимному и разрешения доступа к любому аутентифицированному пользователю. У нас также есть сопоставление МИМ (.* к приложению / октет-потоку). Включите расширение веб-службы 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-server / 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

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

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

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

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