我正在使用带有嵌入式 Grizzly servlet 容器 (2.1.7) 的 Milton WebDAV 服务器 (1.6.8),在其默认配置中,PUT 请求(至少由 Cyberduck 发出)不起作用。我已经将问题归结为如何处理 HTTP 100 Continue 的问题(它显然也会影响 Jetty),Milton 邮件列表和错误跟踪器上的一条消息说这是 servlet 容器的错误,它试图巧妙地处理“透明的期望/继续处理”。
是的,透明处理期望的容器继续有效地破坏 Webdav 的 HTTP 安全性。HTTP 使用质询/响应安全模型,许多客户端都依赖它。即,如果执行 PUT,他们将简单地执行未经身份验证的 PUT,并依靠 ExpectContinue 确保在文件上传之前发出挑战。
但是通过对 ExpectContinue 的透明处理,整个文件在 milton API 能够检查当前用户是否经过身份验证并被授权执行操作之前被上传。
根据您支持的客户端和您的用例,这可能是完全不可接受的、令人讨厌的或根本不是问题。
但是,一般来说,我认为您应该尝试找出是否可以禁用 Grizzly 的透明处理,然后在 milton 中重新启用支持。
我能做些什么来禁用灰熊的透明期望/继续处理,这真的是正确的方法吗?另一种方法是在 Milton 中关闭期望/继续处理,但这似乎破坏了 WebDAV 身份验证。
更新:我现在也尝试了 Jetty(8.1.0.RC1),它表现出与 Grizzly 相同的行为:只有关闭期望/继续处理才能 PUT 文件,默认设置不起作用。