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