Я использую сервер Milton WebDAV (1.6.8) со встроенным контейнером сервлета Grizzly (2.1.7), и в их конфигурации по умолчанию запросы PUT (по крайней мере, выданные Cyberduck) не работают.Я проследил проблему до проблемы с тем, как обрабатывается HTTP 100 Continue (это, по-видимому, также влияет на Jetty), в сообщениях Milton и bug tracker говорится, что этоошибка контейнера сервлета, который пытается быть умным с «прозрачной обработкой ожидания / продолжения».
Да, контейнеры, которые прозрачно обрабатывают ожидание, продолжают эффективно нарушать безопасность HTTP для Webdav.HTTP использует модель безопасности «вызов / ответ», и многие клиенты полагаются на это.Т.е. при выполнении PUT они просто будут выполнять PUT без аутентификации и будут полагаться на ExpectContinue, чтобы убедиться, что вызов выдается до загрузки файла.
Но при прозрачной обработке ExpectContinue весь файл загружается до того, какMilton API может проверить, аутентифицирован ли текущий пользователь и авторизован ли он для выполнения действия.
В зависимости от поддерживаемых клиентов и случаев использования, это может быть либо совершенно неприемлемым, либо неудобством, либо совсем не проблемой.
Но, как правило, я думаю, вам следует попытаться выяснить, можно ли отключить прозрачную обработку в Grizzly, а затем снова включить поддержку в милтонах.
Что можно сделать, чтобы отключитьПрозрачная обработка ожиданий / продолжений Гризли, и действительно ли это правильный подход?В качестве альтернативы можно было бы отключить ожидание / продолжение обработки в Милтоне, но, похоже, это нарушает аутентификацию WebDAV.
Обновление: Я также пробовал Jetty сейчас (8.1.0.RC1), ион демонстрирует то же поведение, что и Grizzly: только при отключенной функции «ожидать / продолжить» я могу ЗАДЕРЖАТЬ файлы, с настройками по умолчанию он не работает.